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