clean up the un-suitable ';' location when declaring the functions.
[people/mcb30/edk2.git] / edk2 / MdeModulePkg / Universal / Console / ConSplitterDxe / ConSplitter.h
1 /** @file\r
2   Private data structures for the Console Splitter driver\r
3 \r
4 Copyright (c) 2006 - 2008 Intel Corporation. <BR>\r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution.  The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9 \r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12 \r
13 **/\r
14 \r
15 #ifndef _CON_SPLITTER_H_\r
16 #define _CON_SPLITTER_H_\r
17 \r
18 #include <Uefi.h>\r
19 #include <Guid/PrimaryStandardErrorDevice.h>\r
20 #include <Guid/PrimaryConsoleOutDevice.h>\r
21 #include <Protocol/GraphicsOutput.h>\r
22 #include <Guid/PrimaryConsoleInDevice.h>\r
23 #include <Guid/GenericPlatformVariable.h>\r
24 #include <Protocol/SimplePointer.h>\r
25 #include <Protocol/AbsolutePointer.h>\r
26 #include <Protocol/SimpleTextOut.h>\r
27 #include <Guid/ConsoleInDevice.h>\r
28 #include <Protocol/SimpleTextIn.h>\r
29 #include <Protocol/SimpleTextInEx.h>\r
30 #include <Protocol/ConsoleControl.h>\r
31 #include <Guid/StandardErrorDevice.h>\r
32 #include <Guid/ConsoleOutDevice.h>\r
33 #include <Protocol/UgaDraw.h>\r
34 #include <Library/PcdLib.h>\r
35 #include <Library/DebugLib.h>\r
36 #include <Library/UefiDriverEntryPoint.h>\r
37 #include <Library/UefiLib.h>\r
38 #include <Library/BaseLib.h>\r
39 #include <Library/BaseMemoryLib.h>\r
40 #include <Library/MemoryAllocationLib.h>\r
41 #include <Library/UefiBootServicesTableLib.h>\r
42 #include <Library/UefiRuntimeServicesTableLib.h>\r
43 \r
44 \r
45 //\r
46 // Driver Binding Externs\r
47 //\r
48 extern EFI_DRIVER_BINDING_PROTOCOL  gConSplitterConInDriverBinding;\r
49 extern EFI_COMPONENT_NAME_PROTOCOL  gConSplitterConInComponentName;\r
50 extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConInComponentName2;\r
51 extern EFI_DRIVER_BINDING_PROTOCOL  gConSplitterSimplePointerDriverBinding;\r
52 extern EFI_COMPONENT_NAME_PROTOCOL  gConSplitterSimplePointerComponentName;\r
53 extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterSimplePointerComponentName2;\r
54 extern EFI_DRIVER_BINDING_PROTOCOL  gConSplitterAbsolutePointerDriverBinding;\r
55 extern EFI_COMPONENT_NAME_PROTOCOL  gConSplitterAbsolutePointerComponentName;\r
56 extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterAbsolutePointerComponentName2;\r
57 extern EFI_DRIVER_BINDING_PROTOCOL  gConSplitterConOutDriverBinding;\r
58 extern EFI_COMPONENT_NAME_PROTOCOL  gConSplitterConOutComponentName;\r
59 extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConOutComponentName2;\r
60 extern EFI_DRIVER_BINDING_PROTOCOL  gConSplitterStdErrDriverBinding;\r
61 extern EFI_COMPONENT_NAME_PROTOCOL  gConSplitterStdErrComponentName;\r
62 extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterStdErrComponentName2;\r
63 \r
64 extern EFI_GUID                     gSimpleTextInExNotifyGuid;\r
65 \r
66 // These definitions were in the old Hii protocol, but are not in the new UEFI\r
67 // version. So they are defined locally.\r
68 #define UNICODE_NARROW_CHAR   0xFFF0\r
69 #define UNICODE_WIDE_CHAR     0xFFF1\r
70 \r
71 \r
72 //\r
73 // Private Data Structures\r
74 //\r
75 #define CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT  32\r
76 #define CONSOLE_SPLITTER_MODES_ALLOC_UNIT     32\r
77 #define MAX_STD_IN_PASSWORD                   80\r
78 \r
79 #define VARCONOUTMODE L"ConOutMode"\r
80 \r
81 typedef struct {\r
82   UINTN   Column;\r
83   UINTN   Row;\r
84 } CONSOLE_OUT_MODE;\r
85 \r
86 typedef struct {\r
87   UINTN Columns;\r
88   UINTN Rows;\r
89 } TEXT_OUT_SPLITTER_QUERY_DATA;\r
90 \r
91 //\r
92 // Private data for the EFI_SIMPLE_TEXT_INPUT_PROTOCOL splitter\r
93 //\r
94 #define TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'p')\r
95 \r
96 #define TEXT_IN_EX_SPLITTER_NOTIFY_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'n')\r
97 \r
98 typedef struct _TEXT_IN_EX_SPLITTER_NOTIFY {\r
99   UINTN                                 Signature;\r
100   EFI_HANDLE                            *NotifyHandleList;\r
101   EFI_HANDLE                            NotifyHandle;\r
102   EFI_KEY_DATA                          KeyData;\r
103   EFI_KEY_NOTIFY_FUNCTION               KeyNotificationFn;\r
104   LIST_ENTRY                            NotifyEntry;\r
105 } TEXT_IN_EX_SPLITTER_NOTIFY;\r
106 \r
107 typedef struct {\r
108   UINT64                             Signature;\r
109   EFI_HANDLE                         VirtualHandle;\r
110 \r
111   EFI_SIMPLE_TEXT_INPUT_PROTOCOL     TextIn;\r
112   UINTN                              CurrentNumberOfConsoles;\r
113   EFI_SIMPLE_TEXT_INPUT_PROTOCOL     **TextInList;\r
114   UINTN                              TextInListCount;\r
115 \r
116   EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  TextInEx;\r
117   UINTN                              CurrentNumberOfExConsoles;\r
118   EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  **TextInExList;\r
119   UINTN                              TextInExListCount;\r
120   LIST_ENTRY                         NotifyList;\r
121 \r
122 \r
123   EFI_SIMPLE_POINTER_PROTOCOL        SimplePointer;\r
124   EFI_SIMPLE_POINTER_MODE            SimplePointerMode;\r
125   UINTN                              CurrentNumberOfPointers;\r
126   EFI_SIMPLE_POINTER_PROTOCOL        **PointerList;\r
127   UINTN                              PointerListCount;\r
128 \r
129   EFI_ABSOLUTE_POINTER_PROTOCOL      AbsolutePointer;\r
130   EFI_ABSOLUTE_POINTER_MODE          AbsolutePointerMode;\r
131   UINTN                              CurrentNumberOfAbsolutePointers;\r
132   EFI_ABSOLUTE_POINTER_PROTOCOL      **AbsolutePointerList;\r
133   UINTN                              AbsolutePointerListCount;\r
134   BOOLEAN                            AbsoluteInputEventSignalState;\r
135 \r
136   BOOLEAN                            PasswordEnabled;\r
137   CHAR16                             Password[MAX_STD_IN_PASSWORD];\r
138   UINTN                              PwdIndex;\r
139   CHAR16                             PwdAttempt[MAX_STD_IN_PASSWORD];\r
140   EFI_EVENT                          LockEvent;\r
141 \r
142   BOOLEAN                            KeyEventSignalState;\r
143   BOOLEAN                            InputEventSignalState;\r
144 } TEXT_IN_SPLITTER_PRIVATE_DATA;\r
145 \r
146 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a)  \\r
147   CR ((a),                                            \\r
148       TEXT_IN_SPLITTER_PRIVATE_DATA,                \\r
149       TextIn,                                       \\r
150       TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE       \\r
151       )\r
152 \r
153 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS(a) \\r
154   CR ((a),                                                          \\r
155       TEXT_IN_SPLITTER_PRIVATE_DATA,                              \\r
156       SimplePointer,                                              \\r
157       TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE                     \\r
158       )\r
159 #define TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \\r
160   CR (a, \\r
161       TEXT_IN_SPLITTER_PRIVATE_DATA, \\r
162       TextInEx, \\r
163       TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \\r
164       )\r
165 \r
166 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_ABSOLUTE_POINTER_THIS(a) \\r
167   CR (a, \\r
168       TEXT_IN_SPLITTER_PRIVATE_DATA, \\r
169       AbsolutePointer, \\r
170       TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \\r
171       )\r
172 \r
173 //\r
174 // Private data for the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL splitter\r
175 //\r
176 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE  EFI_SIGNATURE_32 ('T', 'o', 'S', 'p')\r
177 \r
178 typedef struct {\r
179   EFI_GRAPHICS_OUTPUT_PROTOCOL     *GraphicsOutput;\r
180   EFI_UGA_DRAW_PROTOCOL            *UgaDraw;\r
181   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *TextOut;\r
182   BOOLEAN                          TextOutEnabled;\r
183 } TEXT_OUT_AND_GOP_DATA;\r
184 \r
185 typedef struct {\r
186   UINT64                                Signature;\r
187   EFI_HANDLE                            VirtualHandle;\r
188   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL       TextOut;\r
189   EFI_SIMPLE_TEXT_OUTPUT_MODE           TextOutMode;\r
190                                         \r
191   EFI_UGA_DRAW_PROTOCOL                 UgaDraw;\r
192   UINT32                                UgaHorizontalResolution;\r
193   UINT32                                UgaVerticalResolution;\r
194   UINT32                                UgaColorDepth;\r
195   UINT32                                UgaRefreshRate;\r
196   EFI_UGA_PIXEL                         *UgaBlt;\r
197                                         \r
198   EFI_GRAPHICS_OUTPUT_PROTOCOL          GraphicsOutput;\r
199   EFI_GRAPHICS_OUTPUT_BLT_PIXEL         *GraphicsOutputBlt;\r
200   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  *GraphicsOutputModeBuffer;\r
201   UINTN                                 CurrentNumberOfGraphicsOutput;\r
202   UINTN                                 CurrentNumberOfUgaDraw;\r
203   BOOLEAN                               HardwareNeedsStarting;\r
204                                         \r
205   EFI_CONSOLE_CONTROL_PROTOCOL          ConsoleControl;\r
206                                         \r
207   UINTN                                 CurrentNumberOfConsoles;\r
208   TEXT_OUT_AND_GOP_DATA                 *TextOutList;\r
209   UINTN                                 TextOutListCount;\r
210   TEXT_OUT_SPLITTER_QUERY_DATA          *TextOutQueryData;\r
211   UINTN                                 TextOutQueryDataCount;\r
212   INT32                                 *TextOutModeMap;\r
213                                         \r
214   EFI_CONSOLE_CONTROL_SCREEN_MODE       ConsoleOutputMode;\r
215                                         \r
216   UINTN                                 DevNullColumns;\r
217   UINTN                                 DevNullRows;\r
218   CHAR16                                *DevNullScreen;\r
219   INT32                                 *DevNullAttributes;\r
220 \r
221 } TEXT_OUT_SPLITTER_PRIVATE_DATA;\r
222 \r
223 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \\r
224   CR ((a),                                            \\r
225       TEXT_OUT_SPLITTER_PRIVATE_DATA,               \\r
226       TextOut,                                      \\r
227       TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE      \\r
228       )\r
229 \r
230 #define GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a)  \\r
231   CR ((a),                                                    \\r
232       TEXT_OUT_SPLITTER_PRIVATE_DATA,                       \\r
233       GraphicsOutput,                                       \\r
234       TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE              \\r
235       )\r
236 \r
237 #define UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \\r
238   CR ((a),                                            \\r
239       TEXT_OUT_SPLITTER_PRIVATE_DATA,               \\r
240       UgaDraw,                                      \\r
241       TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE      \\r
242       )\r
243 \r
244 #define CONSOLE_CONTROL_SPLITTER_PRIVATE_DATA_FROM_THIS(a)  \\r
245   CR ((a),                                                    \\r
246       TEXT_OUT_SPLITTER_PRIVATE_DATA,                       \\r
247       ConsoleControl,                                       \\r
248       TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE              \\r
249       )\r
250 \r
251 //\r
252 // Function Prototypes\r
253 //\r
254 \r
255 /**\r
256   The user Entry Point for module ConSplitter. The user code starts with this function.\r
257 \r
258   Installs driver module protocols and. Creates virtual device handles for ConIn,\r
259   ConOut, and StdErr. Installs Simple Text In protocol, Simple Text In Ex protocol,\r
260   Simple Pointer protocol, Absolute Pointer protocol on those virtual handlers. \r
261   Installs Graphics Output protocol and/or UGA Draw protocol if needed.\r
262 \r
263   @param[in] ImageHandle    The firmware allocated handle for the EFI image.\r
264   @param[in] SystemTable    A pointer to the EFI System Table.\r
265 \r
266   @retval EFI_SUCCESS       The entry point is executed successfully.\r
267   @retval other             Some error occurs when executing this entry point.\r
268 \r
269 **/\r
270 EFI_STATUS\r
271 EFIAPI\r
272 ConSplitterDriverEntry (\r
273   IN EFI_HANDLE                       ImageHandle,\r
274   IN EFI_SYSTEM_TABLE                 *SystemTable\r
275   );\r
276 \r
277 /**\r
278   Construct console input devices' private data.\r
279 \r
280   @param  ConInPrivate             A pointer to the TEXT_IN_SPLITTER_PRIVATE_DATA\r
281                                    structure.\r
282 \r
283   @retval EFI_OUT_OF_RESOURCES     Out of resources.\r
284   @retval EFI_SUCCESS              Console Input Devcie's private data has been constructed.\r
285   @retval other                    Failed to construct private data.\r
286 \r
287 **/\r
288 EFI_STATUS\r
289 ConSplitterTextInConstructor (\r
290   TEXT_IN_SPLITTER_PRIVATE_DATA       *Private\r
291   );\r
292 \r
293 /**\r
294   Construct console output devices' private data.\r
295 \r
296   @param  ConOutPrivate            A pointer to the TEXT_IN_SPLITTER_PRIVATE_DATA\r
297                                    structure.\r
298 \r
299   @retval EFI_OUT_OF_RESOURCES     Out of resources.\r
300   @retval EFI_SUCCESS              Text Input Devcie's private data has been constructed.\r
301 \r
302 **/\r
303 EFI_STATUS\r
304 ConSplitterTextOutConstructor (\r
305   TEXT_OUT_SPLITTER_PRIVATE_DATA      *Private\r
306   );\r
307 \r
308 //\r
309 // Driver Binding Functions\r
310 //\r
311 \r
312 /**\r
313   Test to see if Console In Device could be supported on the ControllerHandle. \r
314 \r
315   @param  This                Protocol instance pointer.\r
316   @param  ControllerHandle    Handle of device to test.\r
317   @param  RemainingDevicePath Optional parameter use to pick a specific child\r
318                               device to start.\r
319 \r
320   @retval EFI_SUCCESS         This driver supports this device.\r
321   @retval other               This driver does not support this device.\r
322 \r
323 **/\r
324 EFI_STATUS\r
325 EFIAPI\r
326 ConSplitterConInDriverBindingSupported (\r
327   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
328   IN  EFI_HANDLE                      ControllerHandle,\r
329   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
330   );\r
331 \r
332 /**\r
333   Test to see if Simple Pointer protocol could be supported on the ControllerHandle. \r
334 \r
335   @param  This                Protocol instance pointer.\r
336   @param  ControllerHandle    Handle of device to test.\r
337   @param  RemainingDevicePath Optional parameter use to pick a specific child\r
338                               device to start.\r
339 \r
340   @retval EFI_SUCCESS         This driver supports this device.\r
341   @retval other               This driver does not support this device.\r
342 \r
343 **/\r
344 EFI_STATUS\r
345 EFIAPI\r
346 ConSplitterSimplePointerDriverBindingSupported (\r
347   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
348   IN  EFI_HANDLE                      ControllerHandle,\r
349   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
350   );\r
351 \r
352 /**\r
353   Test to see if Console Out Device could be supported on the ControllerHandle. \r
354 \r
355   @param  This                Protocol instance pointer.\r
356   @param  ControllerHandle    Handle of device to test.\r
357   @param  RemainingDevicePath Optional parameter use to pick a specific child\r
358                               device to start.\r
359 \r
360   @retval EFI_SUCCESS         This driver supports this device.\r
361   @retval other               This driver does not support this device.\r
362 \r
363 **/\r
364 EFI_STATUS\r
365 EFIAPI\r
366 ConSplitterConOutDriverBindingSupported (\r
367   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
368   IN  EFI_HANDLE                      ControllerHandle,\r
369   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
370   );\r
371 \r
372 /**\r
373   Test to see if Standard Error Device could be supported on the ControllerHandle. \r
374 \r
375   @param  This                Protocol instance pointer.\r
376   @param  ControllerHandle    Handle of device to test.\r
377   @param  RemainingDevicePath Optional parameter use to pick a specific child\r
378                               device to start.\r
379 \r
380   @retval EFI_SUCCESS         This driver supports this device.\r
381   @retval other               This driver does not support this device.\r
382 \r
383 **/\r
384 EFI_STATUS\r
385 EFIAPI\r
386 ConSplitterStdErrDriverBindingSupported (\r
387   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
388   IN  EFI_HANDLE                      ControllerHandle,\r
389   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
390   );\r
391 \r
392 /**\r
393   Start Console In Consplitter on device handle. \r
394   \r
395   @param  This                 Protocol instance pointer.\r
396   @param  ControllerHandle     Handle of device to bind driver to.\r
397   @param  RemainingDevicePath  Optional parameter use to pick a specific child\r
398                                device to start.\r
399 \r
400   @retval EFI_SUCCESS          Console In Consplitter is added to ControllerHandle.\r
401   @retval other                Console In Consplitter does not support this device.\r
402 \r
403 **/\r
404 EFI_STATUS\r
405 EFIAPI\r
406 ConSplitterConInDriverBindingStart (\r
407   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
408   IN  EFI_HANDLE                      ControllerHandle,\r
409   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
410   );\r
411 \r
412 /**\r
413   Start Simple Pointer Consplitter on device handle. \r
414   \r
415   @param  This                 Protocol instance pointer.\r
416   @param  ControllerHandle     Handle of device to bind driver to.\r
417   @param  RemainingDevicePath  Optional parameter use to pick a specific child\r
418                                device to start.\r
419 \r
420   @retval EFI_SUCCESS          Simple Pointer Consplitter is added to ControllerHandle.\r
421   @retval other                Simple Pointer Consplitter does not support this device.\r
422 \r
423 **/\r
424 EFI_STATUS\r
425 EFIAPI\r
426 ConSplitterSimplePointerDriverBindingStart (\r
427   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
428   IN  EFI_HANDLE                      ControllerHandle,\r
429   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
430   );\r
431 \r
432 /**\r
433   Start Console Out Consplitter on device handle. \r
434   \r
435   @param  This                 Protocol instance pointer.\r
436   @param  ControllerHandle     Handle of device to bind driver to.\r
437   @param  RemainingDevicePath  Optional parameter use to pick a specific child\r
438                                device to start.\r
439 \r
440   @retval EFI_SUCCESS          Console Out Consplitter is added to ControllerHandle.\r
441   @retval other                Console Out Consplitter does not support this device.\r
442 \r
443 **/\r
444 EFI_STATUS\r
445 EFIAPI\r
446 ConSplitterConOutDriverBindingStart (\r
447   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
448   IN  EFI_HANDLE                      ControllerHandle,\r
449   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
450   );\r
451 \r
452 /**\r
453   Start Standard Error Consplitter on device handle. \r
454   \r
455   @param  This                 Protocol instance pointer.\r
456   @param  ControllerHandle     Handle of device to bind driver to.\r
457   @param  RemainingDevicePath  Optional parameter use to pick a specific child\r
458                                device to start.\r
459 \r
460   @retval EFI_SUCCESS          Standard Error Consplitter is added to ControllerHandle.\r
461   @retval other                Standard Error Consplitter does not support this device.\r
462 \r
463 **/\r
464 EFI_STATUS\r
465 EFIAPI\r
466 ConSplitterStdErrDriverBindingStart (\r
467   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
468   IN  EFI_HANDLE                      ControllerHandle,\r
469   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
470   );\r
471 \r
472 /**\r
473   Stop Console In ConSplitter on ControllerHandle by closing Console In Devcice GUID.\r
474 \r
475   @param  This              Protocol instance pointer.\r
476   @param  ControllerHandle  Handle of device to stop driver on\r
477   @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
478                             children is zero stop the entire bus driver.\r
479   @param  ChildHandleBuffer List of Child Handles to Stop.\r
480 \r
481   @retval EFI_SUCCESS       This driver is removed ControllerHandle\r
482   @retval other             This driver was not removed from this device\r
483 \r
484 **/\r
485 EFI_STATUS\r
486 EFIAPI\r
487 ConSplitterConInDriverBindingStop (\r
488   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
489   IN  EFI_HANDLE                      ControllerHandle,\r
490   IN  UINTN                           NumberOfChildren,\r
491   IN  EFI_HANDLE                      *ChildHandleBuffer\r
492   );\r
493 \r
494 /**\r
495   Stop Simple Pointer protocol ConSplitter on ControllerHandle by closing\r
496   Simple Pointer protocol.\r
497 \r
498   @param  This              Protocol instance pointer.\r
499   @param  ControllerHandle  Handle of device to stop driver on\r
500   @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
501                             children is zero stop the entire bus driver.\r
502   @param  ChildHandleBuffer List of Child Handles to Stop.\r
503 \r
504   @retval EFI_SUCCESS       This driver is removed ControllerHandle\r
505   @retval other             This driver was not removed from this device\r
506 \r
507 **/\r
508 EFI_STATUS\r
509 EFIAPI\r
510 ConSplitterSimplePointerDriverBindingStop (\r
511   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
512   IN  EFI_HANDLE                      ControllerHandle,\r
513   IN  UINTN                           NumberOfChildren,\r
514   IN  EFI_HANDLE                      *ChildHandleBuffer\r
515   );\r
516 \r
517 /**\r
518   Stop Console Out ConSplitter on ControllerHandle by closing Console Out Devcice GUID.\r
519 \r
520   @param  This              Protocol instance pointer.\r
521   @param  ControllerHandle  Handle of device to stop driver on\r
522   @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
523                             children is zero stop the entire bus driver.\r
524   @param  ChildHandleBuffer List of Child Handles to Stop.\r
525 \r
526   @retval EFI_SUCCESS       This driver is removed ControllerHandle\r
527   @retval other             This driver was not removed from this device\r
528 \r
529 **/\r
530 EFI_STATUS\r
531 EFIAPI\r
532 ConSplitterConOutDriverBindingStop (\r
533   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
534   IN  EFI_HANDLE                      ControllerHandle,\r
535   IN  UINTN                           NumberOfChildren,\r
536   IN  EFI_HANDLE                      *ChildHandleBuffer\r
537   );\r
538 \r
539 /**\r
540   Stop Standard Error ConSplitter on ControllerHandle by closing Standard Error GUID.\r
541 \r
542   @param  This              Protocol instance pointer.\r
543   @param  ControllerHandle  Handle of device to stop driver on\r
544   @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
545                             children is zero stop the entire bus driver.\r
546   @param  ChildHandleBuffer List of Child Handles to Stop.\r
547 \r
548   @retval EFI_SUCCESS       This driver is removed ControllerHandle\r
549   @retval other             This driver was not removed from this device\r
550 \r
551 **/\r
552 EFI_STATUS\r
553 EFIAPI\r
554 ConSplitterStdErrDriverBindingStop (\r
555   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
556   IN  EFI_HANDLE                      ControllerHandle,\r
557   IN  UINTN                           NumberOfChildren,\r
558   IN  EFI_HANDLE                      *ChildHandleBuffer\r
559   );\r
560 \r
561 \r
562 /**\r
563   Test to see if Absolute Pointer protocol could be supported on the ControllerHandle. \r
564 \r
565   @param  This                Protocol instance pointer.\r
566   @param  ControllerHandle    Handle of device to test.\r
567   @param  RemainingDevicePath Optional parameter use to pick a specific child\r
568                               device to start.\r
569 \r
570   @retval EFI_SUCCESS         This driver supports this device.\r
571   @retval other               This driver does not support this device.\r
572 \r
573 **/\r
574 EFI_STATUS\r
575 EFIAPI\r
576 ConSplitterAbsolutePointerDriverBindingSupported (\r
577   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
578   IN  EFI_HANDLE                      ControllerHandle,\r
579   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
580   );\r
581 \r
582 /**\r
583   Start Absolute Pointer Consplitter on device handle. \r
584   \r
585   @param  This                 Protocol instance pointer.\r
586   @param  ControllerHandle     Handle of device to bind driver to.\r
587   @param  RemainingDevicePath  Optional parameter use to pick a specific child\r
588                                device to start.\r
589 \r
590   @retval EFI_SUCCESS          Absolute Pointer Consplitter is added to ControllerHandle.\r
591   @retval other                Absolute Pointer Consplitter does not support this device.\r
592 \r
593 **/\r
594 EFI_STATUS\r
595 EFIAPI\r
596 ConSplitterAbsolutePointerDriverBindingStart (\r
597   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
598   IN  EFI_HANDLE                      ControllerHandle,\r
599   IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
600   );\r
601 \r
602 /**\r
603   Stop Absolute Pointer protocol ConSplitter on ControllerHandle by closing\r
604   Absolute Pointer protocol.\r
605 \r
606   @param  This              Protocol instance pointer.\r
607   @param  ControllerHandle  Handle of device to stop driver on\r
608   @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of\r
609                             children is zero stop the entire bus driver.\r
610   @param  ChildHandleBuffer List of Child Handles to Stop.\r
611 \r
612   @retval EFI_SUCCESS       This driver is removed ControllerHandle\r
613   @retval other             This driver was not removed from this device\r
614 \r
615 **/\r
616 EFI_STATUS\r
617 EFIAPI\r
618 ConSplitterAbsolutePointerDriverBindingStop (\r
619   IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
620   IN  EFI_HANDLE                      ControllerHandle,\r
621   IN  UINTN                           NumberOfChildren,\r
622   IN  EFI_HANDLE                      *ChildHandleBuffer\r
623   );\r
624 \r
625 /**\r
626   Add Absolute Pointer Device in Consplitter Absolute Pointer list.\r
627 \r
628   @param  Private                  Text In Splitter pointer.\r
629   @param  AbsolutePointer          Absolute Pointer protocol pointer.\r
630 \r
631   @retval EFI_SUCCESS              Absolute Pointer Device added successfully.\r
632   @retval EFI_OUT_OF_RESOURCES     Could not grow the buffer size.\r
633 \r
634 **/\r
635 EFI_STATUS\r
636 ConSplitterAbsolutePointerAddDevice (\r
637   IN  TEXT_IN_SPLITTER_PRIVATE_DATA     *Private,\r
638   IN  EFI_ABSOLUTE_POINTER_PROTOCOL     *AbsolutePointer\r
639   );\r
640 \r
641 /**\r
642   Remove Absolute Pointer Device in Consplitter Absolute Pointer list.\r
643 \r
644   @param  Private                  Text In Splitter pointer.\r
645   @param  AbsolutePointer          Absolute Pointer protocol pointer.\r
646 \r
647   @retval EFI_SUCCESS              Absolute Pointer Device removed successfully.\r
648   @retval EFI_NOT_FOUND            No Absolute Pointer Device found.\r
649 \r
650 **/\r
651 EFI_STATUS\r
652 ConSplitterAbsolutePointerDeleteDevice (\r
653   IN  TEXT_IN_SPLITTER_PRIVATE_DATA     *Private,\r
654   IN  EFI_ABSOLUTE_POINTER_PROTOCOL     *AbsolutePointer\r
655   );\r
656 \r
657 //\r
658 // Absolute Pointer protocol interfaces\r
659 //\r
660 \r
661 \r
662 /**\r
663   Resets the pointer device hardware.\r
664 \r
665   @param  This                     Protocol instance pointer.\r
666   @param  ExtendedVerification     Driver may perform diagnostics on reset.\r
667 \r
668   @retval EFI_SUCCESS              The device was reset.\r
669   @retval EFI_DEVICE_ERROR         The device is not functioning correctly and\r
670                                    could not be reset.\r
671 \r
672 **/\r
673 EFI_STATUS\r
674 EFIAPI\r
675 ConSplitterAbsolutePointerReset (\r
676   IN EFI_ABSOLUTE_POINTER_PROTOCOL   *This,\r
677   IN BOOLEAN                         ExtendedVerification\r
678   );\r
679 \r
680 \r
681 /**\r
682   Retrieves the current state of a pointer device.\r
683 \r
684   @param  This                     Protocol instance pointer.\r
685   @param  State                    A pointer to the state information on the\r
686                                    pointer device.\r
687 \r
688   @retval EFI_SUCCESS              The state of the pointer device was returned in\r
689                                    State..\r
690   @retval EFI_NOT_READY            The state of the pointer device has not changed\r
691                                    since the last call to GetState().\r
692   @retval EFI_DEVICE_ERROR         A device error occurred while attempting to\r
693                                    retrieve the pointer device's current state.\r
694 \r
695 **/\r
696 EFI_STATUS\r
697 EFIAPI\r
698 ConSplitterAbsolutePointerGetState (\r
699   IN EFI_ABSOLUTE_POINTER_PROTOCOL   *This,\r
700   IN OUT EFI_ABSOLUTE_POINTER_STATE  *State\r
701   );\r
702 \r
703 /**\r
704   This event agregates all the events of the pointer devices in the splitter.\r
705   If the ConIn is password locked then return.\r
706   If any events of physical pointer devices are signaled, signal the pointer\r
707   splitter event. This will cause the calling code to call\r
708   ConSplitterAbsolutePointerGetState ().\r
709 \r
710   @param  Event                    The Event assoicated with callback.\r
711   @param  Context                  Context registered when Event was created.\r
712 \r
713   @return None\r
714 \r
715 **/\r
716 VOID\r
717 EFIAPI\r
718 ConSplitterAbsolutePointerWaitForInput (\r
719   IN  EFI_EVENT                       Event,\r
720   IN  VOID                            *Context\r
721   );\r
722 \r
723 /**\r
724   Retrieves a Unicode string that is the user readable name of the driver.\r
725 \r
726   This function retrieves the user readable name of a driver in the form of a\r
727   Unicode string. If the driver specified by This has a user readable name in\r
728   the language specified by Language, then a pointer to the driver name is\r
729   returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
730   by This does not support the language specified by Language,\r
731   then EFI_UNSUPPORTED is returned.\r
732 \r
733   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
734                                 EFI_COMPONENT_NAME_PROTOCOL instance.\r
735 \r
736   @param  Language[in]          A pointer to a Null-terminated ASCII string\r
737                                 array indicating the language. This is the\r
738                                 language of the driver name that the caller is\r
739                                 requesting, and it must match one of the\r
740                                 languages specified in SupportedLanguages. The\r
741                                 number of languages supported by a driver is up\r
742                                 to the driver writer. Language is specified\r
743                                 in RFC 3066 or ISO 639-2 language code format.\r
744 \r
745   @param  DriverName[out]       A pointer to the Unicode string to return.\r
746                                 This Unicode string is the name of the\r
747                                 driver specified by This in the language\r
748                                 specified by Language.\r
749 \r
750   @retval EFI_SUCCESS           The Unicode string for the Driver specified by\r
751                                 This and the language specified by Language was\r
752                                 returned in DriverName.\r
753 \r
754   @retval EFI_INVALID_PARAMETER Language is NULL.\r
755 \r
756   @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
757 \r
758   @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
759                                 the language specified by Language.\r
760 \r
761 **/\r
762 EFI_STATUS\r
763 EFIAPI\r
764 ConSplitterComponentNameGetDriverName (\r
765   IN  EFI_COMPONENT_NAME_PROTOCOL  *This,\r
766   IN  CHAR8                        *Language,\r
767   OUT CHAR16                       **DriverName\r
768   );\r
769 \r
770 \r
771 /**\r
772   Retrieves a Unicode string that is the user readable name of the controller\r
773   that is being managed by a driver.\r
774 \r
775   This function retrieves the user readable name of the controller specified by\r
776   ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
777   driver specified by This has a user readable name in the language specified by\r
778   Language, then a pointer to the controller name is returned in ControllerName,\r
779   and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
780   managing the controller specified by ControllerHandle and ChildHandle,\r
781   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
782   support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
783 \r
784   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
785                                 EFI_COMPONENT_NAME_PROTOCOL instance.\r
786 \r
787   @param  ControllerHandle[in]  The handle of a controller that the driver\r
788                                 specified by This is managing.  This handle\r
789                                 specifies the controller whose name is to be\r
790                                 returned.\r
791 \r
792   @param  ChildHandle[in]       The handle of the child controller to retrieve\r
793                                 the name of.  This is an optional parameter that\r
794                                 may be NULL.  It will be NULL for device\r
795                                 drivers.  It will also be NULL for a bus drivers\r
796                                 that wish to retrieve the name of the bus\r
797                                 controller.  It will not be NULL for a bus\r
798                                 driver that wishes to retrieve the name of a\r
799                                 child controller.\r
800 \r
801   @param  Language[in]          A pointer to a Null-terminated ASCII string\r
802                                 array indicating the language.  This is the\r
803                                 language of the driver name that the caller is\r
804                                 requesting, and it must match one of the\r
805                                 languages specified in SupportedLanguages. The\r
806                                 number of languages supported by a driver is up\r
807                                 to the driver writer. Language is specified in\r
808                                 RFC 3066 or ISO 639-2 language code format.\r
809 \r
810   @param  ControllerName[out]   A pointer to the Unicode string to return.\r
811                                 This Unicode string is the name of the\r
812                                 controller specified by ControllerHandle and\r
813                                 ChildHandle in the language specified by\r
814                                 Language from the point of view of the driver\r
815                                 specified by This.\r
816 \r
817   @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
818                                 the language specified by Language for the\r
819                                 driver specified by This was returned in\r
820                                 DriverName.\r
821 \r
822   @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
823 \r
824   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
825                                 EFI_HANDLE.\r
826 \r
827   @retval EFI_INVALID_PARAMETER Language is NULL.\r
828 \r
829   @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
830 \r
831   @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
832                                 managing the controller specified by\r
833                                 ControllerHandle and ChildHandle.\r
834 \r
835   @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
836                                 the language specified by Language.\r
837 \r
838 **/\r
839 EFI_STATUS\r
840 EFIAPI\r
841 ConSplitterConInComponentNameGetControllerName (\r
842   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
843   IN  EFI_HANDLE                                      ControllerHandle,\r
844   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
845   IN  CHAR8                                           *Language,\r
846   OUT CHAR16                                          **ControllerName\r
847   );\r
848 \r
849 \r
850 /**\r
851   Retrieves a Unicode string that is the user readable name of the controller\r
852   that is being managed by a driver.\r
853 \r
854   This function retrieves the user readable name of the controller specified by\r
855   ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
856   driver specified by This has a user readable name in the language specified by\r
857   Language, then a pointer to the controller name is returned in ControllerName,\r
858   and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
859   managing the controller specified by ControllerHandle and ChildHandle,\r
860   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
861   support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
862 \r
863   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
864                                 EFI_COMPONENT_NAME_PROTOCOL instance.\r
865 \r
866   @param  ControllerHandle[in]  The handle of a controller that the driver\r
867                                 specified by This is managing.  This handle\r
868                                 specifies the controller whose name is to be\r
869                                 returned.\r
870 \r
871   @param  ChildHandle[in]       The handle of the child controller to retrieve\r
872                                 the name of.  This is an optional parameter that\r
873                                 may be NULL.  It will be NULL for device\r
874                                 drivers.  It will also be NULL for a bus drivers\r
875                                 that wish to retrieve the name of the bus\r
876                                 controller.  It will not be NULL for a bus\r
877                                 driver that wishes to retrieve the name of a\r
878                                 child controller.\r
879 \r
880   @param  Language[in]          A pointer to a Null-terminated ASCII string\r
881                                 array indicating the language.  This is the\r
882                                 language of the driver name that the caller is\r
883                                 requesting, and it must match one of the\r
884                                 languages specified in SupportedLanguages. The\r
885                                 number of languages supported by a driver is up\r
886                                 to the driver writer. Language is specified in\r
887                                 RFC 3066 or ISO 639-2 language code format.\r
888 \r
889   @param  ControllerName[out]   A pointer to the Unicode string to return.\r
890                                 This Unicode string is the name of the\r
891                                 controller specified by ControllerHandle and\r
892                                 ChildHandle in the language specified by\r
893                                 Language from the point of view of the driver\r
894                                 specified by This.\r
895 \r
896   @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
897                                 the language specified by Language for the\r
898                                 driver specified by This was returned in\r
899                                 DriverName.\r
900 \r
901   @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
902 \r
903   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
904                                 EFI_HANDLE.\r
905 \r
906   @retval EFI_INVALID_PARAMETER Language is NULL.\r
907 \r
908   @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
909 \r
910   @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
911                                 managing the controller specified by\r
912                                 ControllerHandle and ChildHandle.\r
913 \r
914   @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
915                                 the language specified by Language.\r
916 \r
917 **/\r
918 EFI_STATUS\r
919 EFIAPI\r
920 ConSplitterSimplePointerComponentNameGetControllerName (\r
921   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
922   IN  EFI_HANDLE                                      ControllerHandle,\r
923   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
924   IN  CHAR8                                           *Language,\r
925   OUT CHAR16                                          **ControllerName\r
926   );\r
927 \r
928 /**\r
929   Retrieves a Unicode string that is the user readable name of the controller\r
930   that is being managed by an EFI Driver.\r
931 \r
932   @param  This                   A pointer to the EFI_COMPONENT_NAME_PROTOCOL\r
933                                  instance.\r
934   @param  ControllerHandle       The handle of a controller that the driver\r
935                                  specified by This is managing.  This handle\r
936                                  specifies the controller whose name is to be\r
937                                  returned.\r
938   @param  ChildHandle            The handle of the child controller to retrieve the\r
939                                  name of.  This is an optional parameter that may\r
940                                  be NULL.  It will be NULL for device drivers.  It\r
941                                  will also be NULL for a bus drivers that wish to\r
942                                  retrieve the name of the bus controller.  It will\r
943                                  not be NULL for a bus driver that wishes to\r
944                                  retrieve the name of a child controller.\r
945   @param  Language               A pointer to RFC3066 language identifier. This is\r
946                                  the language of the controller name that that the\r
947                                  caller is requesting, and it must match one of the\r
948                                  languages specified in SupportedLanguages.  The\r
949                                  number of languages supported by a driver is up to\r
950                                  the driver writer.\r
951   @param  ControllerName         A pointer to the Unicode string to return.  This\r
952                                  Unicode string is the name of the controller\r
953                                  specified by ControllerHandle and ChildHandle in\r
954                                  the language specified by Language from the point\r
955                                  of view of the driver specified by This.\r
956 \r
957   @retval EFI_SUCCESS            The Unicode string for the user readable name in\r
958                                  the language specified by Language for the driver\r
959                                  specified by This was returned in DriverName.\r
960   @retval EFI_INVALID_PARAMETER  ControllerHandle is not a valid EFI_HANDLE.\r
961   @retval EFI_INVALID_PARAMETER  ChildHandle is not NULL and it is not a valid\r
962                                  EFI_HANDLE.\r
963   @retval EFI_INVALID_PARAMETER  Language is NULL.\r
964   @retval EFI_INVALID_PARAMETER  ControllerName is NULL.\r
965   @retval EFI_UNSUPPORTED        The driver specified by This is not currently\r
966                                  managing the controller specified by\r
967                                  ControllerHandle and ChildHandle.\r
968   @retval EFI_UNSUPPORTED        The driver specified by This does not support the\r
969                                  language specified by Language.\r
970 \r
971 **/\r
972 EFI_STATUS\r
973 EFIAPI\r
974 ConSplitterAbsolutePointerComponentNameGetControllerName (\r
975   IN  EFI_COMPONENT_NAME_PROTOCOL                    *This,\r
976   IN  EFI_HANDLE                                      ControllerHandle,\r
977   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
978   IN  CHAR8                                           *Language,\r
979   OUT CHAR16                                          **ControllerName\r
980   );\r
981 \r
982 /**\r
983   Retrieves a Unicode string that is the user readable name of the controller\r
984   that is being managed by a driver.\r
985 \r
986   This function retrieves the user readable name of the controller specified by\r
987   ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
988   driver specified by This has a user readable name in the language specified by\r
989   Language, then a pointer to the controller name is returned in ControllerName,\r
990   and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
991   managing the controller specified by ControllerHandle and ChildHandle,\r
992   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
993   support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
994 \r
995   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
996                                 EFI_COMPONENT_NAME_PROTOCOL instance.\r
997 \r
998   @param  ControllerHandle[in]  The handle of a controller that the driver\r
999                                 specified by This is managing.  This handle\r
1000                                 specifies the controller whose name is to be\r
1001                                 returned.\r
1002 \r
1003   @param  ChildHandle[in]       The handle of the child controller to retrieve\r
1004                                 the name of.  This is an optional parameter that\r
1005                                 may be NULL.  It will be NULL for device\r
1006                                 drivers.  It will also be NULL for a bus drivers\r
1007                                 that wish to retrieve the name of the bus\r
1008                                 controller.  It will not be NULL for a bus\r
1009                                 driver that wishes to retrieve the name of a\r
1010                                 child controller.\r
1011 \r
1012   @param  Language[in]          A pointer to a Null-terminated ASCII string\r
1013                                 array indicating the language.  This is the\r
1014                                 language of the driver name that the caller is\r
1015                                 requesting, and it must match one of the\r
1016                                 languages specified in SupportedLanguages. The\r
1017                                 number of languages supported by a driver is up\r
1018                                 to the driver writer. Language is specified in\r
1019                                 RFC 3066 or ISO 639-2 language code format.\r
1020 \r
1021   @param  ControllerName[out]   A pointer to the Unicode string to return.\r
1022                                 This Unicode string is the name of the\r
1023                                 controller specified by ControllerHandle and\r
1024                                 ChildHandle in the language specified by\r
1025                                 Language from the point of view of the driver\r
1026                                 specified by This.\r
1027 \r
1028   @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
1029                                 the language specified by Language for the\r
1030                                 driver specified by This was returned in\r
1031                                 DriverName.\r
1032 \r
1033   @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
1034 \r
1035   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
1036                                 EFI_HANDLE.\r
1037 \r
1038   @retval EFI_INVALID_PARAMETER Language is NULL.\r
1039 \r
1040   @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
1041 \r
1042   @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
1043                                 managing the controller specified by\r
1044                                 ControllerHandle and ChildHandle.\r
1045 \r
1046   @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
1047                                 the language specified by Language.\r
1048 \r
1049 **/\r
1050 EFI_STATUS\r
1051 EFIAPI\r
1052 ConSplitterConOutComponentNameGetControllerName (\r
1053   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
1054   IN  EFI_HANDLE                                      ControllerHandle,\r
1055   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
1056   IN  CHAR8                                           *Language,\r
1057   OUT CHAR16                                          **ControllerName\r
1058   );\r
1059 \r
1060 \r
1061 /**\r
1062   Retrieves a Unicode string that is the user readable name of the controller\r
1063   that is being managed by a driver.\r
1064 \r
1065   This function retrieves the user readable name of the controller specified by\r
1066   ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
1067   driver specified by This has a user readable name in the language specified by\r
1068   Language, then a pointer to the controller name is returned in ControllerName,\r
1069   and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
1070   managing the controller specified by ControllerHandle and ChildHandle,\r
1071   then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
1072   support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
1073 \r
1074   @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
1075                                 EFI_COMPONENT_NAME_PROTOCOL instance.\r
1076 \r
1077   @param  ControllerHandle[in]  The handle of a controller that the driver\r
1078                                 specified by This is managing.  This handle\r
1079                                 specifies the controller whose name is to be\r
1080                                 returned.\r
1081 \r
1082   @param  ChildHandle[in]       The handle of the child controller to retrieve\r
1083                                 the name of.  This is an optional parameter that\r
1084                                 may be NULL.  It will be NULL for device\r
1085                                 drivers.  It will also be NULL for a bus drivers\r
1086                                 that wish to retrieve the name of the bus\r
1087                                 controller.  It will not be NULL for a bus\r
1088                                 driver that wishes to retrieve the name of a\r
1089                                 child controller.\r
1090 \r
1091   @param  Language[in]          A pointer to a Null-terminated ASCII string\r
1092                                 array indicating the language.  This is the\r
1093                                 language of the driver name that the caller is\r
1094                                 requesting, and it must match one of the\r
1095                                 languages specified in SupportedLanguages. The\r
1096                                 number of languages supported by a driver is up\r
1097                                 to the driver writer. Language is specified in\r
1098                                 RFC 3066 or ISO 639-2 language code format.\r
1099 \r
1100   @param  ControllerName[out]   A pointer to the Unicode string to return.\r
1101                                 This Unicode string is the name of the\r
1102                                 controller specified by ControllerHandle and\r
1103                                 ChildHandle in the language specified by\r
1104                                 Language from the point of view of the driver\r
1105                                 specified by This.\r
1106 \r
1107   @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
1108                                 the language specified by Language for the\r
1109                                 driver specified by This was returned in\r
1110                                 DriverName.\r
1111 \r
1112   @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
1113 \r
1114   @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
1115                                 EFI_HANDLE.\r
1116 \r
1117   @retval EFI_INVALID_PARAMETER Language is NULL.\r
1118 \r
1119   @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
1120 \r
1121   @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
1122                                 managing the controller specified by\r
1123                                 ControllerHandle and ChildHandle.\r
1124 \r
1125   @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
1126                                 the language specified by Language.\r
1127 \r
1128 **/\r
1129 EFI_STATUS\r
1130 EFIAPI\r
1131 ConSplitterStdErrComponentNameGetControllerName (\r
1132   IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
1133   IN  EFI_HANDLE                                      ControllerHandle,\r
1134   IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
1135   IN  CHAR8                                           *Language,\r
1136   OUT CHAR16                                          **ControllerName\r
1137   );\r
1138 \r
1139 \r
1140 //\r
1141 // TextIn Constructor/Destructor functions\r
1142 //\r
1143 \r
1144 /**\r
1145   Add Text Input Device in Consplitter Text Input list.\r
1146 \r
1147   @param  Private                  Text In Splitter pointer.\r
1148   @param  TextIn                   Simple Text Input protocol pointer.\r
1149 \r
1150   @retval EFI_SUCCESS              Text Input Device added successfully.\r
1151   @retval EFI_OUT_OF_RESOURCES     Could not grow the buffer size.\r
1152 \r
1153 **/\r
1154 EFI_STATUS\r
1155 ConSplitterTextInAddDevice (\r
1156   IN  TEXT_IN_SPLITTER_PRIVATE_DATA      *Private,\r
1157   IN  EFI_SIMPLE_TEXT_INPUT_PROTOCOL     *TextIn\r
1158   );\r
1159 \r
1160 /**\r
1161   Remove Simple Text Device in Consplitter Absolute Pointer list.\r
1162 \r
1163   @param  Private                  Text In Splitter pointer.\r
1164   @param  TextIn                   Simple Text protocol pointer.\r
1165 \r
1166   @retval EFI_SUCCESS              Simple Text Device removed successfully.\r
1167   @retval EFI_NOT_FOUND            No Simple Text Device found.\r
1168 \r
1169 **/\r
1170 EFI_STATUS\r
1171 ConSplitterTextInDeleteDevice (\r
1172   IN  TEXT_IN_SPLITTER_PRIVATE_DATA      *Private,\r
1173   IN  EFI_SIMPLE_TEXT_INPUT_PROTOCOL     *TextIn\r
1174   );\r
1175 \r
1176 //\r
1177 // SimplePointer Constuctor/Destructor functions\r
1178 //\r
1179 \r
1180 /**\r
1181   Add Simple Pointer Device in Consplitter Simple Pointer list.\r
1182 \r
1183   @param  Private                  Text In Splitter pointer.\r
1184   @param  SimplePointer            Simple Pointer protocol pointer.\r
1185 \r
1186   @retval EFI_SUCCESS              Simple Pointer Device added successfully.\r
1187   @retval EFI_OUT_OF_RESOURCES     Could not grow the buffer size.\r
1188 \r
1189 **/\r
1190 EFI_STATUS\r
1191 ConSplitterSimplePointerAddDevice (\r
1192   IN  TEXT_IN_SPLITTER_PRIVATE_DATA   *Private,\r
1193   IN  EFI_SIMPLE_POINTER_PROTOCOL     *SimplePointer\r
1194   );\r
1195 \r
1196 /**\r
1197   Remove Simple Pointer Device in Consplitter Absolute Pointer list.\r
1198 \r
1199   @param  Private                  Text In Splitter pointer.\r
1200   @param  SimplePointer            Simple Pointer protocol pointer.\r
1201 \r
1202   @retval EFI_SUCCESS              Simple Pointer Device removed successfully.\r
1203   @retval EFI_NOT_FOUND            No Simple Pointer Device found.\r
1204 \r
1205 **/\r
1206 EFI_STATUS\r
1207 ConSplitterSimplePointerDeleteDevice (\r
1208   IN  TEXT_IN_SPLITTER_PRIVATE_DATA   *Private,\r
1209   IN  EFI_SIMPLE_POINTER_PROTOCOL     *SimplePointer\r
1210   );\r
1211 \r
1212 //\r
1213 // TextOut Constuctor/Destructor functions\r
1214 //\r
1215 \r
1216 /**\r
1217   Add Text Output Device in Consplitter Text Output list.\r
1218 \r
1219   @param  Private                  Text Out Splitter pointer.\r
1220   @param  TextOut                  Simple Text Output protocol pointer.\r
1221   @param  GraphicsOutput           Graphics Output protocol pointer.\r
1222   @param  UgaDraw                  UGA Draw protocol pointer.\r
1223 \r
1224   @retval EFI_SUCCESS              Text Output Device added successfully.\r
1225   @retval EFI_OUT_OF_RESOURCES     Could not grow the buffer size.\r
1226 \r
1227 **/\r
1228 EFI_STATUS\r
1229 ConSplitterTextOutAddDevice (\r
1230   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA     *Private,\r
1231   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *TextOut,\r
1232   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL       *GraphicsOutput,\r
1233   IN  EFI_UGA_DRAW_PROTOCOL              *UgaDraw\r
1234   );\r
1235 \r
1236 /**\r
1237   Remove Text Out Device in Consplitter Text Out list.\r
1238 \r
1239   @param  Private                  Text Out Splitter pointer.\r
1240   @param  TextOut                  Simple Text Output Pointer protocol pointer.\r
1241 \r
1242   @retval EFI_SUCCESS              Text Out Device removed successfully.\r
1243   @retval EFI_NOT_FOUND            No Text Out Device found.\r
1244 \r
1245 **/\r
1246 EFI_STATUS\r
1247 ConSplitterTextOutDeleteDevice (\r
1248   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA     *Private,\r
1249   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *TextOut\r
1250   );\r
1251 \r
1252 //\r
1253 // TextIn I/O Functions\r
1254 //\r
1255 \r
1256 /**\r
1257   Reset the input device and optionaly run diagnostics\r
1258 \r
1259   @param  This                     Protocol instance pointer.\r
1260   @param  ExtendedVerification     Driver may perform diagnostics on reset.\r
1261 \r
1262   @retval EFI_SUCCESS              The device was reset.\r
1263   @retval EFI_DEVICE_ERROR         The device is not functioning properly and could\r
1264                                    not be reset.\r
1265 \r
1266 **/\r
1267 EFI_STATUS\r
1268 EFIAPI\r
1269 ConSplitterTextInReset (\r
1270   IN  EFI_SIMPLE_TEXT_INPUT_PROTOCOL     *This,\r
1271   IN  BOOLEAN                            ExtendedVerification\r
1272   );\r
1273 \r
1274 /**\r
1275   Reads the next keystroke from the input device. The WaitForKey Event can\r
1276   be used to test for existance of a keystroke via WaitForEvent () call.\r
1277   If the ConIn is password locked make it look like no keystroke is availible\r
1278 \r
1279   @param  This                     Protocol instance pointer.\r
1280   @param  Key                      Driver may perform diagnostics on reset.\r
1281 \r
1282   @retval EFI_SUCCESS              The keystroke information was returned.\r
1283   @retval EFI_NOT_READY            There was no keystroke data availiable.\r
1284   @retval EFI_DEVICE_ERROR         The keydtroke information was not returned due\r
1285                                    to hardware errors.\r
1286 \r
1287 **/\r
1288 EFI_STATUS\r
1289 EFIAPI\r
1290 ConSplitterTextInReadKeyStroke (\r
1291   IN  EFI_SIMPLE_TEXT_INPUT_PROTOCOL     *This,\r
1292   OUT EFI_INPUT_KEY                      *Key\r
1293   );\r
1294 \r
1295 /**\r
1296   Add Text Input Ex Device in Consplitter Text Input Ex list.\r
1297 \r
1298   @param  Private                  Text In Splitter pointer.\r
1299   @param  TextInEx                 Simple Text Ex Input protocol pointer.\r
1300 \r
1301   @retval EFI_SUCCESS              Text Input Ex Device added successfully.\r
1302   @retval EFI_OUT_OF_RESOURCES     Could not grow the buffer size.\r
1303 \r
1304 **/\r
1305 EFI_STATUS\r
1306 ConSplitterTextInExAddDevice (\r
1307   IN  TEXT_IN_SPLITTER_PRIVATE_DATA         *Private,\r
1308   IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *TextInEx\r
1309   );\r
1310 \r
1311 /**\r
1312   Remove Simple Text Ex Device in Consplitter Absolute Pointer list.\r
1313 \r
1314   @param  Private                  Text In Splitter pointer.\r
1315   @param  TextInEx                 Simple Text Ex protocol pointer.\r
1316 \r
1317   @retval EFI_SUCCESS              Simple Text Ex Device removed successfully.\r
1318   @retval EFI_NOT_FOUND            No Simple Text Ex Device found.\r
1319 \r
1320 **/\r
1321 EFI_STATUS\r
1322 ConSplitterTextInExDeleteDevice (\r
1323   IN  TEXT_IN_SPLITTER_PRIVATE_DATA         *Private,\r
1324   IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *TextInEx\r
1325   );\r
1326 \r
1327 //\r
1328 // Simple Text Input Ex protocol function prototypes\r
1329 //\r
1330 \r
1331 \r
1332 /**\r
1333   Reset the input device and optionaly run diagnostics\r
1334 \r
1335   @param  This                     Protocol instance pointer.\r
1336   @param  ExtendedVerification     Driver may perform diagnostics on reset.\r
1337 \r
1338   @retval EFI_SUCCESS              The device was reset.\r
1339   @retval EFI_DEVICE_ERROR         The device is not functioning properly and could\r
1340                                    not be reset.\r
1341 \r
1342 **/\r
1343 EFI_STATUS\r
1344 EFIAPI\r
1345 ConSplitterTextInResetEx (\r
1346   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,\r
1347   IN BOOLEAN                            ExtendedVerification\r
1348   );\r
1349 \r
1350 \r
1351 /**\r
1352   Reads the next keystroke from the input device. The WaitForKey Event can\r
1353   be used to test for existance of a keystroke via WaitForEvent () call.\r
1354 \r
1355   @param  This                     Protocol instance pointer.\r
1356   @param  KeyData                  A pointer to a buffer that is filled in with the\r
1357                                    keystroke state data for the key that was\r
1358                                    pressed.\r
1359 \r
1360   @retval EFI_SUCCESS              The keystroke information was returned.\r
1361   @retval EFI_NOT_READY            There was no keystroke data availiable.\r
1362   @retval EFI_DEVICE_ERROR         The keystroke information was not returned due\r
1363                                    to hardware errors.\r
1364   @retval EFI_INVALID_PARAMETER    KeyData is NULL.\r
1365 \r
1366 **/\r
1367 EFI_STATUS\r
1368 EFIAPI\r
1369 ConSplitterTextInReadKeyStrokeEx (\r
1370   IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
1371   OUT EFI_KEY_DATA                      *KeyData\r
1372   );\r
1373 \r
1374 \r
1375 /**\r
1376   Set certain state for the input device.\r
1377 \r
1378   @param  This                     Protocol instance pointer.\r
1379   @param  KeyToggleState           A pointer to the EFI_KEY_TOGGLE_STATE to set the\r
1380                                    state for the input device.\r
1381 \r
1382   @retval EFI_SUCCESS              The device state was set successfully.\r
1383   @retval EFI_DEVICE_ERROR         The device is not functioning correctly and\r
1384                                    could not have the setting adjusted.\r
1385   @retval EFI_UNSUPPORTED          The device does not have the ability to set its\r
1386                                    state.\r
1387   @retval EFI_INVALID_PARAMETER    KeyToggleState is NULL.\r
1388 \r
1389 **/\r
1390 EFI_STATUS\r
1391 EFIAPI\r
1392 ConSplitterTextInSetState (\r
1393   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,\r
1394   IN EFI_KEY_TOGGLE_STATE               *KeyToggleState\r
1395   );\r
1396 \r
1397 \r
1398 /**\r
1399   Register a notification function for a particular keystroke for the input device.\r
1400 \r
1401   @param  This                     Protocol instance pointer.\r
1402   @param  KeyData                  A pointer to a buffer that is filled in with the\r
1403                                    keystroke information data for the key that was\r
1404                                    pressed.\r
1405   @param  KeyNotificationFunction  Points to the function to be called when the key\r
1406                                    sequence is typed specified by KeyData.\r
1407   @param  NotifyHandle             Points to the unique handle assigned to the\r
1408                                    registered notification.\r
1409 \r
1410   @retval EFI_SUCCESS              The notification function was registered\r
1411                                    successfully.\r
1412   @retval EFI_OUT_OF_RESOURCES     Unable to allocate resources for necesssary data\r
1413                                    structures.\r
1414   @retval EFI_INVALID_PARAMETER    KeyData or NotifyHandle is NULL.\r
1415 \r
1416 **/\r
1417 EFI_STATUS\r
1418 EFIAPI\r
1419 ConSplitterTextInRegisterKeyNotify (\r
1420   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,\r
1421   IN EFI_KEY_DATA                       *KeyData,\r
1422   IN EFI_KEY_NOTIFY_FUNCTION            KeyNotificationFunction,\r
1423   OUT EFI_HANDLE                        *NotifyHandle\r
1424   );\r
1425 \r
1426 \r
1427 /**\r
1428   Remove a registered notification function from a particular keystroke.\r
1429 \r
1430   @param  This                     Protocol instance pointer.\r
1431   @param  NotificationHandle       The handle of the notification function being\r
1432                                    unregistered.\r
1433 \r
1434   @retval EFI_SUCCESS              The notification function was unregistered\r
1435                                    successfully.\r
1436   @retval EFI_INVALID_PARAMETER    The NotificationHandle is invalid.\r
1437   @retval EFI_NOT_FOUND            Can not find the matching entry in database.\r
1438 \r
1439 **/\r
1440 EFI_STATUS\r
1441 EFIAPI\r
1442 ConSplitterTextInUnregisterKeyNotify (\r
1443   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,\r
1444   IN EFI_HANDLE                         NotificationHandle\r
1445   );\r
1446 \r
1447 /**\r
1448   This event agregates all the events of the ConIn devices in the spliter.\r
1449   If the ConIn is password locked then return.\r
1450   If any events of physical ConIn devices are signaled, signal the ConIn\r
1451   spliter event. This will cause the calling code to call\r
1452   ConSplitterTextInReadKeyStroke ().\r
1453 \r
1454   @param  Event                    The Event assoicated with callback.\r
1455   @param  Context                  Context registered when Event was created.\r
1456 \r
1457   @return None\r
1458 \r
1459 **/\r
1460 VOID\r
1461 EFIAPI\r
1462 ConSplitterTextInWaitForKey (\r
1463   IN  EFI_EVENT                       Event,\r
1464   IN  VOID                            *Context\r
1465   );\r
1466 /**\r
1467   Return TRUE if StdIn is locked. The ConIn device on the virtual handle is\r
1468   the only device locked.\r
1469 \r
1470   NONE\r
1471 \r
1472   @retval TRUE                     StdIn locked\r
1473   @retval FALSE                    StdIn working normally\r
1474 \r
1475 **/\r
1476 BOOLEAN\r
1477 ConSpliterConssoleControlStdInLocked (\r
1478   VOID\r
1479   );\r
1480 /**\r
1481   This timer event will fire when StdIn is locked. It will check the key\r
1482   sequence on StdIn to see if it matches the password. Any error in the\r
1483   password will cause the check to reset. As long a mConIn.PasswordEnabled is\r
1484   TRUE the StdIn splitter will not report any input.\r
1485 \r
1486   @param  Event                  The Event this notify function registered to.\r
1487   @param  Context                Pointer to the context data registerd to the\r
1488                                  Event.\r
1489 \r
1490   @return None\r
1491 \r
1492 **/\r
1493 VOID\r
1494 EFIAPI\r
1495 ConSpliterConsoleControlLockStdInEvent (\r
1496   IN  EFI_EVENT                       Event,\r
1497   IN  VOID                            *Context\r
1498   );\r
1499 \r
1500 /**\r
1501   If Password is NULL unlock the password state variable and set the event\r
1502   timer. If the Password is too big return an error. If the Password is valid\r
1503   Copy the Password and enable state variable and then arm the periodic timer\r
1504 \r
1505   @param  This                     Console Control protocol pointer.\r
1506   @param  Password                 The password input.\r
1507 \r
1508   @retval EFI_SUCCESS              Lock the StdIn device\r
1509   @retval EFI_INVALID_PARAMETER    Password is NULL\r
1510   @retval EFI_OUT_OF_RESOURCES     Buffer allocation to store the password fails\r
1511 \r
1512 **/\r
1513 EFI_STATUS\r
1514 EFIAPI\r
1515 ConSpliterConsoleControlLockStdIn (\r
1516   IN  EFI_CONSOLE_CONTROL_PROTOCOL    *This,\r
1517   IN  CHAR16                          *Password\r
1518   );\r
1519 \r
1520 /**\r
1521   Reads the next keystroke from the input device. The WaitForKey Event can\r
1522   be used to test for existance of a keystroke via WaitForEvent () call.\r
1523 \r
1524   @param  Private                  Protocol instance pointer.\r
1525   @param  Key                      Driver may perform diagnostics on reset.\r
1526 \r
1527   @retval EFI_SUCCESS              The keystroke information was returned.\r
1528   @retval EFI_NOT_READY            There was no keystroke data availiable.\r
1529   @retval EFI_DEVICE_ERROR         The keydtroke information was not returned due\r
1530                                    to hardware errors.\r
1531 \r
1532 **/\r
1533 EFI_STATUS\r
1534 EFIAPI\r
1535 ConSplitterTextInPrivateReadKeyStroke (\r
1536   IN  TEXT_IN_SPLITTER_PRIVATE_DATA   *Private,\r
1537   OUT EFI_INPUT_KEY                   *Key\r
1538   );\r
1539 \r
1540 /**\r
1541   Reset the input device and optionaly run diagnostics\r
1542 \r
1543   @param  This                     Protocol instance pointer.\r
1544   @param  ExtendedVerification     Driver may perform diagnostics on reset.\r
1545 \r
1546   @retval EFI_SUCCESS              The device was reset.\r
1547   @retval EFI_DEVICE_ERROR         The device is not functioning properly and could\r
1548                                    not be reset.\r
1549 \r
1550 **/\r
1551 EFI_STATUS\r
1552 EFIAPI\r
1553 ConSplitterSimplePointerReset (\r
1554   IN  EFI_SIMPLE_POINTER_PROTOCOL     *This,\r
1555   IN  BOOLEAN                         ExtendedVerification\r
1556   );\r
1557 \r
1558 /**\r
1559   Reads the next keystroke from the input device. The WaitForKey Event can\r
1560   be used to test for existance of a keystroke via WaitForEvent () call.\r
1561   If the ConIn is password locked make it look like no keystroke is availible\r
1562 \r
1563   @param  This                     A pointer to protocol instance.\r
1564   @param  State                    A pointer to state information on the pointer device\r
1565 \r
1566   @retval EFI_SUCCESS              The keystroke information was returned in State.\r
1567   @retval EFI_NOT_READY            There was no keystroke data availiable.\r
1568   @retval EFI_DEVICE_ERROR         The keydtroke information was not returned due\r
1569                                    to hardware errors.\r
1570 \r
1571 **/\r
1572 EFI_STATUS\r
1573 EFIAPI\r
1574 ConSplitterSimplePointerGetState (\r
1575   IN  EFI_SIMPLE_POINTER_PROTOCOL     *This,\r
1576   IN OUT EFI_SIMPLE_POINTER_STATE     *State\r
1577   );\r
1578 \r
1579 /**\r
1580   This event agregates all the events of the ConIn devices in the spliter.\r
1581   If the ConIn is password locked then return.\r
1582   If any events of physical ConIn devices are signaled, signal the ConIn\r
1583   spliter event. This will cause the calling code to call\r
1584   ConSplitterTextInReadKeyStroke ().\r
1585 \r
1586   @param  Event                    The Event assoicated with callback.\r
1587   @param  Context                  Context registered when Event was created.\r
1588 \r
1589   @return None\r
1590 \r
1591 **/\r
1592 VOID\r
1593 EFIAPI\r
1594 ConSplitterSimplePointerWaitForInput (\r
1595   IN  EFI_EVENT                       Event,\r
1596   IN  VOID                            *Context\r
1597   );\r
1598 \r
1599 //\r
1600 // TextOut I/O Functions\r
1601 //\r
1602 \r
1603 /**\r
1604   Reset the text output device hardware and optionaly run diagnostics\r
1605 \r
1606   @param  This                     Protocol instance pointer.\r
1607   @param  ExtendedVerification     Driver may perform more exhaustive verfication\r
1608                                    operation of the device during reset.\r
1609 \r
1610   @retval EFI_SUCCESS              The text output device was reset.\r
1611   @retval EFI_DEVICE_ERROR         The text output device is not functioning\r
1612                                    correctly and could not be reset.\r
1613 \r
1614 **/\r
1615 EFI_STATUS\r
1616 EFIAPI\r
1617 ConSplitterTextOutReset (\r
1618   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1619   IN  BOOLEAN                            ExtendedVerification\r
1620   );\r
1621 \r
1622 /**\r
1623   Write a Unicode string to the output device.\r
1624 \r
1625   @param  This                     Protocol instance pointer.\r
1626   @param  WString                  The NULL-terminated Unicode string to be\r
1627                                    displayed on the output device(s). All output\r
1628                                    devices must also support the Unicode drawing\r
1629                                    defined in this file.\r
1630 \r
1631   @retval EFI_SUCCESS              The string was output to the device.\r
1632   @retval EFI_DEVICE_ERROR         The device reported an error while attempting to\r
1633                                    output the text.\r
1634   @retval EFI_UNSUPPORTED          The output device's mode is not currently in a\r
1635                                    defined text mode.\r
1636   @retval EFI_WARN_UNKNOWN_GLYPH   This warning code indicates that some of the\r
1637                                    characters in the Unicode string could not be\r
1638                                    rendered and were skipped.\r
1639 \r
1640 **/\r
1641 EFI_STATUS\r
1642 EFIAPI\r
1643 ConSplitterTextOutOutputString (\r
1644   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1645   IN  CHAR16                             *WString\r
1646   );\r
1647 \r
1648 /**\r
1649   Verifies that all characters in a Unicode string can be output to the\r
1650   target device.\r
1651 \r
1652   @param  This                     Protocol instance pointer.\r
1653   @param  WString                  The NULL-terminated Unicode string to be\r
1654                                    examined for the output device(s).\r
1655 \r
1656   @retval EFI_SUCCESS              The device(s) are capable of rendering the\r
1657                                    output string.\r
1658   @retval EFI_UNSUPPORTED          Some of the characters in the Unicode string\r
1659                                    cannot be rendered by one or more of the output\r
1660                                    devices mapped by the EFI handle.\r
1661 \r
1662 **/\r
1663 EFI_STATUS\r
1664 EFIAPI\r
1665 ConSplitterTextOutTestString (\r
1666   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1667   IN  CHAR16                             *WString\r
1668   );\r
1669 \r
1670 /**\r
1671   Returns information for an available text mode that the output device(s)\r
1672   supports.\r
1673 \r
1674   @param  This                     Protocol instance pointer.\r
1675   @param  ModeNumber               The mode number to return information on.\r
1676   @param  Columns                  Returns the columns of the text output device\r
1677                                    for the requested ModeNumber.\r
1678   @param  Rows                     Returns the rows of the text output device\r
1679                                    for the requested ModeNumber.\r
1680 \r
1681   @retval EFI_SUCCESS              The requested mode information was returned.\r
1682   @retval EFI_DEVICE_ERROR         The device had an error and could not complete\r
1683                                    the request.\r
1684   @retval EFI_UNSUPPORTED          The mode number was not valid.\r
1685 \r
1686 **/\r
1687 EFI_STATUS\r
1688 EFIAPI\r
1689 ConSplitterTextOutQueryMode (\r
1690   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1691   IN  UINTN                              ModeNumber,\r
1692   OUT UINTN                              *Columns,\r
1693   OUT UINTN                              *Rows\r
1694   );\r
1695 \r
1696 /**\r
1697   Sets the output device(s) to a specified mode.\r
1698 \r
1699   @param  This                     Protocol instance pointer.\r
1700   @param  ModeNumber               The mode number to set.\r
1701 \r
1702   @retval EFI_SUCCESS              The requested text mode was set.\r
1703   @retval EFI_DEVICE_ERROR         The device had an error and could not complete\r
1704                                    the request.\r
1705   @retval EFI_UNSUPPORTED          The mode number was not valid.\r
1706 \r
1707 **/\r
1708 EFI_STATUS\r
1709 EFIAPI\r
1710 ConSplitterTextOutSetMode (\r
1711   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1712   IN  UINTN                              ModeNumber\r
1713   );\r
1714 \r
1715 /**\r
1716   Sets the background and foreground colors for the OutputString () and\r
1717   ClearScreen () functions.\r
1718 \r
1719   @param  This                     Protocol instance pointer.\r
1720   @param  Attribute                The attribute to set. Bits 0..3 are the\r
1721                                    foreground color, and bits 4..6 are the\r
1722                                    background color. All other bits are undefined\r
1723                                    and must be zero. The valid Attributes are\r
1724                                    defined in this file.\r
1725 \r
1726   @retval EFI_SUCCESS              The attribute was set.\r
1727   @retval EFI_DEVICE_ERROR         The device had an error and could not complete\r
1728                                    the request.\r
1729   @retval EFI_UNSUPPORTED          The attribute requested is not defined.\r
1730 \r
1731 **/\r
1732 EFI_STATUS\r
1733 EFIAPI\r
1734 ConSplitterTextOutSetAttribute (\r
1735   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1736   IN  UINTN                              Attribute\r
1737   );\r
1738 \r
1739 /**\r
1740   Clears the output device(s) display to the currently selected background\r
1741   color.\r
1742 \r
1743   @param  This                     Protocol instance pointer.\r
1744 \r
1745   @retval EFI_SUCCESS              The operation completed successfully.\r
1746   @retval EFI_DEVICE_ERROR         The device had an error and could not complete\r
1747                                    the request.\r
1748   @retval EFI_UNSUPPORTED          The output device is not in a valid text mode.\r
1749 \r
1750 **/\r
1751 EFI_STATUS\r
1752 EFIAPI\r
1753 ConSplitterTextOutClearScreen (\r
1754   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This\r
1755   );\r
1756 \r
1757 /**\r
1758   Sets the current coordinates of the cursor position\r
1759 \r
1760   @param  This                     Protocol instance pointer.\r
1761   @param  Column                   The column position to set the cursor to. Must be\r
1762                                    greater than or equal to zero and less than the\r
1763                                    number of columns by QueryMode ().\r
1764   @param  Row                      The row position to set the cursor to. Must be\r
1765                                    greater than or equal to zero and less than the\r
1766                                    number of rows by QueryMode ().\r
1767 \r
1768   @retval EFI_SUCCESS              The operation completed successfully.\r
1769   @retval EFI_DEVICE_ERROR         The device had an error and could not complete\r
1770                                    the request.\r
1771   @retval EFI_UNSUPPORTED          The output device is not in a valid text mode,\r
1772                                    or the cursor position is invalid for the\r
1773                                    current mode.\r
1774 \r
1775 **/\r
1776 EFI_STATUS\r
1777 EFIAPI\r
1778 ConSplitterTextOutSetCursorPosition (\r
1779   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1780   IN  UINTN                              Column,\r
1781   IN  UINTN                              Row\r
1782   );\r
1783 \r
1784 \r
1785 /**\r
1786   Makes the cursor visible or invisible\r
1787 \r
1788   @param  This                     Protocol instance pointer.\r
1789   @param  Visible                  If TRUE, the cursor is set to be visible. If\r
1790                                    FALSE, the cursor is set to be invisible.\r
1791 \r
1792   @retval EFI_SUCCESS              The operation completed successfully.\r
1793   @retval EFI_DEVICE_ERROR         The device had an error and could not complete\r
1794                                    the request, or the device does not support\r
1795                                    changing the cursor mode.\r
1796   @retval EFI_UNSUPPORTED          The output device is not in a valid text mode.\r
1797 \r
1798 **/\r
1799 EFI_STATUS\r
1800 EFIAPI\r
1801 ConSplitterTextOutEnableCursor (\r
1802   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *This,\r
1803   IN  BOOLEAN                            Visible\r
1804   );\r
1805 \r
1806 /**\r
1807   Take the passed in Buffer of size SizeOfCount and grow the buffer\r
1808   by MAX (CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT, MaxGrow) * SizeOfCount\r
1809   bytes. Copy the current data in Buffer to the new version of Buffer\r
1810   and free the old version of buffer.\r
1811 \r
1812   @param  SizeOfCount              Size of element in array\r
1813   @param  Count                    Current number of elements in array\r
1814   @param  Buffer                   Bigger version of passed in Buffer with all the\r
1815                                    data\r
1816 \r
1817   @retval EFI_SUCCESS              Buffer size has grown\r
1818   @retval EFI_OUT_OF_RESOURCES     Could not grow the buffer size.\r
1819 \r
1820 **/\r
1821 EFI_STATUS\r
1822 ConSplitterGrowBuffer (\r
1823   IN  UINTN                           SizeOfCount,\r
1824   IN  UINTN                           *Count,\r
1825   IN OUT  VOID                        **Buffer\r
1826   );\r
1827 \r
1828 /**\r
1829   Return the current video mode information. Also returns info about existence\r
1830   of Graphics Output devices or UGA Draw devices in system, and if the Std In device is locked. All the\r
1831   arguments are optional and only returned if a non NULL pointer is passed in.\r
1832 \r
1833   @param  This                    Protocol instance pointer.\r
1834   @param  Mode                    Are we in text of grahics mode.\r
1835   @param  GopExists               TRUE if GOP Spliter has found a GOP/UGA device\r
1836   @param  StdInLocked             TRUE if StdIn device is keyboard locked\r
1837 \r
1838   @retval EFI_SUCCESS             Mode information returned.\r
1839   @retval EFI_INVALID_PARAMETER   Invalid parameters.\r
1840 \r
1841 **/\r
1842 EFI_STATUS\r
1843 EFIAPI\r
1844 ConSpliterConsoleControlGetMode (\r
1845   IN  EFI_CONSOLE_CONTROL_PROTOCOL    *This,\r
1846   OUT EFI_CONSOLE_CONTROL_SCREEN_MODE *Mode,\r
1847   OUT BOOLEAN                         *GopExists,\r
1848   OUT BOOLEAN                         *StdInLocked\r
1849   );\r
1850 \r
1851 /**\r
1852   Set the current mode to either text or graphics. Graphics is\r
1853   for Quiet Boot.\r
1854 \r
1855   @param  This                    Protocol instance pointer.\r
1856   @param  Mode                    Mode to set the\r
1857 \r
1858   @retval EFI_SUCCESS             Mode information returned.\r
1859   @retval EFI_INVALID_PARAMETER   Invalid parameter.\r
1860   @retval EFI_UNSUPPORTED         Operation unsupported.\r
1861 \r
1862 **/\r
1863 EFI_STATUS\r
1864 EFIAPI\r
1865 ConSpliterConsoleControlSetMode (\r
1866   IN  EFI_CONSOLE_CONTROL_PROTOCOL    *This,\r
1867   IN  EFI_CONSOLE_CONTROL_SCREEN_MODE Mode\r
1868   );\r
1869 \r
1870 /**\r
1871   Return the current video mode information.\r
1872 \r
1873   @param  This                    Protocol instance pointer.\r
1874   @param  ModeNumber              The mode number to return information on.\r
1875   @param  SizeOfInfo              A pointer to the size, in bytes, of the Info\r
1876                                   buffer.\r
1877   @param  Info                    Caller allocated buffer that returns information\r
1878                                   about ModeNumber.\r
1879 \r
1880   @retval EFI_SUCCESS             Mode information returned.\r
1881   @retval EFI_BUFFER_TOO_SMALL    The Info buffer was too small.\r
1882   @retval EFI_DEVICE_ERROR        A hardware error occurred trying to retrieve the\r
1883                                   video mode.\r
1884   @retval EFI_NOT_STARTED         Video display is not initialized. Call SetMode ()\r
1885   @retval EFI_INVALID_PARAMETER   One of the input args was NULL.\r
1886 \r
1887 **/\r
1888 EFI_STATUS\r
1889 EFIAPI\r
1890 ConSpliterGraphicsOutputQueryMode (\r
1891   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL        *This,\r
1892   IN  UINT32                            ModeNumber,\r
1893   OUT UINTN                              *SizeOfInfo,\r
1894   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info\r
1895   );\r
1896 \r
1897 /**\r
1898   Graphics output protocol interface to set video mode.\r
1899 \r
1900   @param  This                    Protocol instance pointer.\r
1901   @param  ModeNumber              The mode number to be set.\r
1902 \r
1903   @retval EFI_SUCCESS             Graphics mode was changed.\r
1904   @retval EFI_DEVICE_ERROR        The device had an error and could not complete\r
1905                                   the request.\r
1906   @retval EFI_UNSUPPORTED         ModeNumber is not supported by this device.\r
1907 \r
1908 **/\r
1909 EFI_STATUS\r
1910 EFIAPI\r
1911 ConSpliterGraphicsOutputSetMode (\r
1912   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL * This,\r
1913   IN  UINT32                       ModeNumber\r
1914   );\r
1915 \r
1916 /**\r
1917   The following table defines actions for BltOperations.\r
1918 \r
1919   EfiBltVideoFill - Write data from the  BltBuffer pixel (SourceX, SourceY)\r
1920   directly to every pixel of the video display rectangle\r
1921   (DestinationX, DestinationY)\r
1922   (DestinationX + Width, DestinationY + Height).\r
1923   Only one pixel will be used from the BltBuffer. Delta is NOT used.\r
1924   EfiBltVideoToBltBuffer - Read data from the video display rectangle\r
1925   (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in\r
1926   the BltBuffer rectangle (DestinationX, DestinationY )\r
1927   (DestinationX + Width, DestinationY + Height). If DestinationX or\r
1928   DestinationY is not zero then Delta must be set to the length in bytes\r
1929   of a row in the BltBuffer.\r
1930   EfiBltBufferToVideo - Write data from the  BltBuffer rectangle\r
1931   (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the\r
1932   video display rectangle (DestinationX, DestinationY)\r
1933   (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is\r
1934   not zero then Delta must be set to the length in bytes of a row in the\r
1935   BltBuffer.\r
1936   EfiBltVideoToVideo - Copy from the video display rectangle\r
1937   (SourceX, SourceY) (SourceX + Width, SourceY + Height) .\r
1938   to the video display rectangle (DestinationX, DestinationY)\r
1939   (DestinationX + Width, DestinationY + Height).\r
1940   The BltBuffer and Delta  are not used in this mode.\r
1941 \r
1942   @param  This                    Protocol instance pointer.\r
1943   @param  BltBuffer               Buffer containing data to blit into video buffer.\r
1944                                   This buffer has a size of\r
1945                                   Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
1946   @param  BltOperation            Operation to perform on BlitBuffer and video\r
1947                                   memory\r
1948   @param  SourceX                 X coordinate of source for the BltBuffer.\r
1949   @param  SourceY                 Y coordinate of source for the BltBuffer.\r
1950   @param  DestinationX            X coordinate of destination for the BltBuffer.\r
1951   @param  DestinationY            Y coordinate of destination for the BltBuffer.\r
1952   @param  Width                   Width of rectangle in BltBuffer in pixels.\r
1953   @param  Height                  Hight of rectangle in BltBuffer in pixels. \r
1954   @param  Delta                   OPTIONAL.\r
1955 \r
1956   @retval EFI_SUCCESS             The Blt operation completed.\r
1957   @retval EFI_INVALID_PARAMETER   BltOperation is not valid.\r
1958   @retval EFI_DEVICE_ERROR        A hardware error occured writting to the video\r
1959                                   buffer.\r
1960 \r
1961 **/\r
1962 EFI_STATUS\r
1963 EFIAPI\r
1964 ConSpliterGraphicsOutputBlt (\r
1965   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL                  *This,\r
1966   IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL                 *BltBuffer, OPTIONAL\r
1967   IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION             BltOperation,\r
1968   IN  UINTN                                         SourceX,\r
1969   IN  UINTN                                         SourceY,\r
1970   IN  UINTN                                         DestinationX,\r
1971   IN  UINTN                                         DestinationY,\r
1972   IN  UINTN                                         Width,\r
1973   IN  UINTN                                         Height,\r
1974   IN  UINTN                                         Delta         OPTIONAL\r
1975   );\r
1976 \r
1977 /**\r
1978   Write data from the buffer to video display based on Graphics Output setting. \r
1979 \r
1980   @param  Private                 Consplitter Text Out pointer.\r
1981   @param  GraphicsOutput          Graphics Output protocol pointer.\r
1982   @param  UgaDraw                 UGA Draw protocol pointer.\r
1983 \r
1984   @retval EFI_UNSUPPORTED         No graphics devcie available .\r
1985   @retval EFI_SUCCESS             The Blt operation completed.\r
1986   @retval EFI_INVALID_PARAMETER   BltOperation is not valid.\r
1987   @retval EFI_DEVICE_ERROR        A hardware error occured writting to the video buffer.\r
1988                  \r
1989 \r
1990 **/\r
1991 EFI_STATUS\r
1992 DevNullGopSync (\r
1993   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private,\r
1994   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL    *GraphicsOutput,\r
1995   IN  EFI_UGA_DRAW_PROTOCOL           *UgaDraw\r
1996   );\r
1997 \r
1998 /**\r
1999   Return the current video mode information.\r
2000 \r
2001   @param  This                    Protocol instance pointer.\r
2002   @param  HorizontalResolution    Current video horizontal resolution in pixels\r
2003   @param  VerticalResolution      Current video vertical resolution in pixels\r
2004   @param  ColorDepth              Current video color depth in bits per pixel\r
2005   @param  RefreshRate             Current video refresh rate in Hz.\r
2006 \r
2007   @retval EFI_SUCCESS             Mode information returned.\r
2008   @retval EFI_NOT_STARTED         Video display is not initialized. Call SetMode ()\r
2009   @retval EFI_INVALID_PARAMETER   One of the input args was NULL.\r
2010 \r
2011 **/\r
2012 EFI_STATUS\r
2013 EFIAPI\r
2014 ConSpliterUgaDrawGetMode (\r
2015   IN  EFI_UGA_DRAW_PROTOCOL           *This,\r
2016   OUT UINT32                          *HorizontalResolution,\r
2017   OUT UINT32                          *VerticalResolution,\r
2018   OUT UINT32                          *ColorDepth,\r
2019   OUT UINT32                          *RefreshRate\r
2020   );\r
2021 \r
2022 /**\r
2023   Return the current video mode information.\r
2024 \r
2025   @param  This                    Protocol instance pointer.\r
2026   @param  HorizontalResolution    Current video horizontal resolution in pixels\r
2027   @param  VerticalResolution      Current video vertical resolution in pixels\r
2028   @param  ColorDepth              Current video color depth in bits per pixel\r
2029   @param  RefreshRate             Current video refresh rate in Hz.\r
2030 \r
2031   @retval EFI_SUCCESS             Mode information returned.\r
2032   @retval EFI_NOT_STARTED         Video display is not initialized. Call SetMode ()\r
2033   @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
2034 \r
2035 **/\r
2036 EFI_STATUS\r
2037 EFIAPI\r
2038 ConSpliterUgaDrawSetMode (\r
2039   IN  EFI_UGA_DRAW_PROTOCOL           *This,\r
2040   IN UINT32                           HorizontalResolution,\r
2041   IN UINT32                           VerticalResolution,\r
2042   IN UINT32                           ColorDepth,\r
2043   IN UINT32                           RefreshRate\r
2044   );\r
2045 \r
2046 /**\r
2047   The following table defines actions for BltOperations.\r
2048 \r
2049   EfiUgaVideoFill - Write data from the  BltBuffer pixel (SourceX, SourceY)\r
2050   directly to every pixel of the video display rectangle\r
2051   (DestinationX, DestinationY)\r
2052   (DestinationX + Width, DestinationY + Height).\r
2053   Only one pixel will be used from the BltBuffer. Delta is NOT used.\r
2054   EfiUgaVideoToBltBuffer - Read data from the video display rectangle\r
2055   (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in\r
2056   the BltBuffer rectangle (DestinationX, DestinationY )\r
2057   (DestinationX + Width, DestinationY + Height). If DestinationX or\r
2058   DestinationY is not zero then Delta must be set to the length in bytes\r
2059   of a row in the BltBuffer.\r
2060   EfiUgaBltBufferToVideo - Write data from the  BltBuffer rectangle\r
2061   (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the\r
2062   video display rectangle (DestinationX, DestinationY)\r
2063   (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is\r
2064   not zero then Delta must be set to the length in bytes of a row in the\r
2065   BltBuffer.\r
2066   EfiUgaVideoToVideo - Copy from the video display rectangle\r
2067   (SourceX, SourceY) (SourceX + Width, SourceY + Height) .\r
2068   to the video display rectangle (DestinationX, DestinationY)\r
2069   (DestinationX + Width, DestinationY + Height).\r
2070   The BltBuffer and Delta  are not used in this mode.\r
2071 \r
2072   @param  This                    Protocol instance pointer.\r
2073   @param  BltBuffer               Buffer containing data to blit into video buffer.\r
2074                                   This buffer has a size of\r
2075                                   Width*Height*sizeof(EFI_UGA_PIXEL)\r
2076   @param  BltOperation            Operation to perform on BlitBuffer and video\r
2077                                   memory\r
2078   @param  SourceX                 X coordinate of source for the BltBuffer.\r
2079   @param  SourceY                 Y coordinate of source for the BltBuffer.\r
2080   @param  DestinationX            X coordinate of destination for the BltBuffer.\r
2081   @param  DestinationY            Y coordinate of destination for the BltBuffer.\r
2082   @param  Width                   Width of rectangle in BltBuffer in pixels.\r
2083   @param  Height                  Hight of rectangle in BltBuffer in pixels. \r
2084   @param  Delta                   OPTIONAL.\r
2085 \r
2086   @retval EFI_SUCCESS             The Blt operation completed.\r
2087   @retval EFI_INVALID_PARAMETER   BltOperation is not valid.\r
2088   @retval EFI_DEVICE_ERROR        A hardware error occured writting to the video\r
2089                                   buffer.\r
2090 \r
2091 **/\r
2092 EFI_STATUS\r
2093 EFIAPI\r
2094 ConSpliterUgaDrawBlt (\r
2095   IN  EFI_UGA_DRAW_PROTOCOL                         *This,\r
2096   IN  EFI_UGA_PIXEL                                 *BltBuffer, OPTIONAL\r
2097   IN  EFI_UGA_BLT_OPERATION                         BltOperation,\r
2098   IN  UINTN                                         SourceX,\r
2099   IN  UINTN                                         SourceY,\r
2100   IN  UINTN                                         DestinationX,\r
2101   IN  UINTN                                         DestinationY,\r
2102   IN  UINTN                                         Width,\r
2103   IN  UINTN                                         Height,\r
2104   IN  UINTN                                         Delta         OPTIONAL\r
2105   );\r
2106 \r
2107 /**\r
2108   Write data from the buffer to video display based on UGA Draw setting. \r
2109 \r
2110   @param  Private                 Consplitter Text Out pointer.\r
2111   @param  GraphicsOutput          Graphics Output protocol pointer.\r
2112   @param  UgaDraw                 UGA Draw protocol pointer.\r
2113 \r
2114   @retval EFI_UNSUPPORTED         No graphics devcie available .\r
2115   @retval EFI_SUCCESS             The Blt operation completed.\r
2116   @retval EFI_INVALID_PARAMETER   BltOperation is not valid.\r
2117   @retval EFI_DEVICE_ERROR        A hardware error occured writting to the video buffer.\r
2118                   \r
2119 **/\r
2120 EFI_STATUS\r
2121 DevNullUgaSync (\r
2122   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private,\r
2123   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL    *GraphicsOutput,\r
2124   IN  EFI_UGA_DRAW_PROTOCOL           *UgaDraw\r
2125   );\r
2126 \r
2127 /**\r
2128   Write a Unicode string to the output device.\r
2129 \r
2130   @param  Private                 Pointer to the console output splitter's private\r
2131                                   data. It indicates the calling context.\r
2132   @param  WString                 The NULL-terminated Unicode string to be\r
2133                                   displayed on the output device(s). All output\r
2134                                   devices must also support the Unicode drawing\r
2135                                   defined in this file.\r
2136 \r
2137   @retval EFI_SUCCESS             The string was output to the device.\r
2138   @retval EFI_DEVICE_ERROR        The device reported an error while attempting to\r
2139                                   output the text.\r
2140   @retval EFI_UNSUPPORTED         The output device's mode is not currently in a\r
2141                                   defined text mode.\r
2142   @retval EFI_WARN_UNKNOWN_GLYPH  This warning code indicates that some of the\r
2143                                   characters in the Unicode string could not be\r
2144                                   rendered and were skipped.\r
2145 \r
2146 **/\r
2147 EFI_STATUS\r
2148 DevNullTextOutOutputString (\r
2149   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private,\r
2150   IN  CHAR16                          *WString\r
2151   );\r
2152 \r
2153 /**\r
2154   Sets the output device(s) to a specified mode.\r
2155 \r
2156   @param  Private                 Private data structure pointer.\r
2157   @param  ModeNumber              The mode number to set.\r
2158 \r
2159   @retval EFI_SUCCESS             The requested text mode was set.\r
2160   @retval EFI_DEVICE_ERROR        The device had an error and could not complete\r
2161                                   the request.\r
2162   @retval EFI_UNSUPPORTED         The mode number was not valid.\r
2163   @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
2164 \r
2165 **/\r
2166 EFI_STATUS\r
2167 DevNullTextOutSetMode (\r
2168   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private,\r
2169   IN  UINTN                           ModeNumber\r
2170   );\r
2171 \r
2172 /**\r
2173   Clears the output device(s) display to the currently selected background\r
2174   color.\r
2175 \r
2176   @param  Private                 Protocol instance pointer.\r
2177 \r
2178   @retval EFI_SUCCESS             The operation completed successfully.\r
2179   @retval EFI_DEVICE_ERROR        The device had an error and could not complete\r
2180                                   the request.\r
2181   @retval EFI_UNSUPPORTED         The output device is not in a valid text mode.\r
2182 \r
2183 **/\r
2184 EFI_STATUS\r
2185 DevNullTextOutClearScreen (\r
2186   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private\r
2187   );\r
2188 \r
2189 /**\r
2190   Sets the current coordinates of the cursor position.\r
2191 \r
2192   @param  Private                 Protocol instance pointer.\r
2193   @param  Column                  \r
2194   @param  Row                     the position to set the cursor to. Must be\r
2195                                   greater than or equal to zero and less than the\r
2196                                   number of columns and rows by QueryMode ().\r
2197 \r
2198   @retval EFI_SUCCESS             The operation completed successfully.\r
2199   @retval EFI_DEVICE_ERROR        The device had an error and could not complete\r
2200                                   the request.\r
2201   @retval EFI_UNSUPPORTED         The output device is not in a valid text mode, or\r
2202                                   the cursor position is invalid for the current\r
2203                                   mode.\r
2204 \r
2205 **/\r
2206 EFI_STATUS\r
2207 DevNullTextOutSetCursorPosition (\r
2208   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private,\r
2209   IN  UINTN                           Column,\r
2210   IN  UINTN                           Row\r
2211   );\r
2212 \r
2213 /**\r
2214   Implements SIMPLE_TEXT_OUTPUT.EnableCursor().\r
2215   In this driver, the cursor cannot be hidden.\r
2216 \r
2217   @param  Private                 Indicates the calling context.\r
2218   @param  Visible                 If TRUE, the cursor is set to be visible, If\r
2219                                   FALSE, the cursor is set to be invisible.\r
2220 \r
2221   @retval EFI_SUCCESS             The request is valid.\r
2222 \r
2223 **/\r
2224 EFI_STATUS\r
2225 DevNullTextOutEnableCursor (\r
2226   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private,\r
2227   IN  BOOLEAN                         Visible\r
2228   );\r
2229 \r
2230 /**\r
2231   Take the DevNull TextOut device and update the Simple Text Out on every\r
2232   UGA device.\r
2233 \r
2234   @param  Private                 Indicates the calling context.\r
2235 \r
2236   @retval EFI_SUCCESS             The request is valid.\r
2237   @retval other                   Return status of TextOut->OutputString ()\r
2238 \r
2239 **/\r
2240 EFI_STATUS\r
2241 DevNullSyncStdOut (\r
2242   IN  TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private\r
2243   );\r
2244 \r
2245 #endif\r