2 Private data structures for the Console Splitter driver
4 Copyright (c) 2006 - 2007 Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #ifndef _CON_SPLITTER_H_
16 #define _CON_SPLITTER_H_
19 #include <Guid/PrimaryStandardErrorDevice.h>
20 #include <Guid/PrimaryConsoleOutDevice.h>
21 #include <Protocol/GraphicsOutput.h>
22 #include <Guid/PrimaryConsoleInDevice.h>
23 #include <Protocol/SimplePointer.h>
24 #include <Protocol/SimpleTextOut.h>
25 #include <Guid/ConsoleInDevice.h>
26 #include <Protocol/SimpleTextIn.h>
27 #include <Protocol/ConsoleControl.h>
28 #include <Guid/StandardErrorDevice.h>
29 #include <Guid/ConsoleOutDevice.h>
30 #include <Protocol/UgaDraw.h>
31 #include <Library/DebugLib.h>
32 #include <Library/UefiDriverEntryPoint.h>
33 #include <Library/UefiLib.h>
34 #include <Library/BaseLib.h>
35 #include <Library/BaseMemoryLib.h>
36 #include <Library/MemoryAllocationLib.h>
37 #include <Library/UefiBootServicesTableLib.h>
40 // Driver Binding Externs
42 extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterConInDriverBinding
;
43 extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterConInComponentName
;
44 extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterSimplePointerDriverBinding
;
45 extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterSimplePointerComponentName
;
46 extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterConOutDriverBinding
;
47 extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterConOutComponentName
;
48 extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterStdErrDriverBinding
;
49 extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterStdErrComponentName
;
51 // These definitions were in the old Hii protocol, but are not in the new UEFI
52 // version. So they are defined locally.
53 #define UNICODE_NARROW_CHAR 0xFFF0
54 #define UNICODE_WIDE_CHAR 0xFFF1
58 // Private Data Structures
60 #define CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT 32
61 #define CONSOLE_SPLITTER_MODES_ALLOC_UNIT 32
62 #define MAX_STD_IN_PASSWORD 80
67 } TEXT_OUT_SPLITTER_QUERY_DATA
;
70 // Private data for the EFI_SIMPLE_TEXT_INPUT_PROTOCOL splitter
72 #define TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'p')
76 EFI_HANDLE VirtualHandle
;
78 EFI_SIMPLE_TEXT_INPUT_PROTOCOL TextIn
;
79 UINTN CurrentNumberOfConsoles
;
80 EFI_SIMPLE_TEXT_INPUT_PROTOCOL
**TextInList
;
81 UINTN TextInListCount
;
83 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer
;
84 EFI_SIMPLE_POINTER_MODE SimplePointerMode
;
85 UINTN CurrentNumberOfPointers
;
86 EFI_SIMPLE_POINTER_PROTOCOL
**PointerList
;
87 UINTN PointerListCount
;
89 BOOLEAN PasswordEnabled
;
90 CHAR16 Password
[MAX_STD_IN_PASSWORD
];
92 CHAR16 PwdAttempt
[MAX_STD_IN_PASSWORD
];
95 BOOLEAN KeyEventSignalState
;
96 BOOLEAN InputEventSignalState
;
97 } TEXT_IN_SPLITTER_PRIVATE_DATA
;
99 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
101 TEXT_IN_SPLITTER_PRIVATE_DATA, \
103 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \
106 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS(a) \
108 TEXT_IN_SPLITTER_PRIVATE_DATA, \
110 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \
114 // Private data for the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL splitter
116 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'o', 'S', 'p')
119 EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
;
120 EFI_UGA_DRAW_PROTOCOL
*UgaDraw
;
121 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*TextOut
;
122 BOOLEAN TextOutEnabled
;
123 } TEXT_OUT_AND_GOP_DATA
;
126 UINT32 HorizontalResolution
;
127 UINT32 VerticalResolution
;
132 EFI_HANDLE VirtualHandle
;
133 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL TextOut
;
134 EFI_SIMPLE_TEXT_OUTPUT_MODE TextOutMode
;
136 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput
;
137 EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*GraphicsOutputBlt
;
138 TEXT_OUT_GOP_MODE
*GraphicsOutputModeBuffer
;
139 UINTN CurrentNumberOfGraphicsOutput
;
140 BOOLEAN HardwareNeedsStarting
;
142 EFI_CONSOLE_CONTROL_PROTOCOL ConsoleControl
;
144 UINTN CurrentNumberOfConsoles
;
145 TEXT_OUT_AND_GOP_DATA
*TextOutList
;
146 UINTN TextOutListCount
;
147 TEXT_OUT_SPLITTER_QUERY_DATA
*TextOutQueryData
;
148 UINTN TextOutQueryDataCount
;
149 INT32
*TextOutModeMap
;
151 EFI_CONSOLE_CONTROL_SCREEN_MODE ConsoleOutputMode
;
153 UINTN DevNullColumns
;
155 CHAR16
*DevNullScreen
;
156 INT32
*DevNullAttributes
;
158 } TEXT_OUT_SPLITTER_PRIVATE_DATA
;
160 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
162 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
164 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
167 #define GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
169 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
171 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
174 #define UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
176 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
178 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
181 #define CONSOLE_CONTROL_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
183 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
185 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
189 // Function Prototypes
193 ConSplitterDriverEntry (
194 IN EFI_HANDLE ImageHandle
,
195 IN EFI_SYSTEM_TABLE
*SystemTable
200 ConSplitterTextInConstructor (
201 TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
206 ConSplitterTextOutConstructor (
207 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
212 // Driver Binding Functions
216 ConSplitterConInDriverBindingSupported (
217 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
218 IN EFI_HANDLE ControllerHandle
,
219 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
225 ConSplitterSimplePointerDriverBindingSupported (
226 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
227 IN EFI_HANDLE ControllerHandle
,
228 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
234 ConSplitterConOutDriverBindingSupported (
235 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
236 IN EFI_HANDLE ControllerHandle
,
237 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
243 ConSplitterStdErrDriverBindingSupported (
244 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
245 IN EFI_HANDLE ControllerHandle
,
246 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
252 ConSplitterConInDriverBindingStart (
253 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
254 IN EFI_HANDLE ControllerHandle
,
255 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
261 ConSplitterSimplePointerDriverBindingStart (
262 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
263 IN EFI_HANDLE ControllerHandle
,
264 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
270 ConSplitterConOutDriverBindingStart (
271 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
272 IN EFI_HANDLE ControllerHandle
,
273 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
279 ConSplitterStdErrDriverBindingStart (
280 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
281 IN EFI_HANDLE ControllerHandle
,
282 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
288 ConSplitterConInDriverBindingStop (
289 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
290 IN EFI_HANDLE ControllerHandle
,
291 IN UINTN NumberOfChildren
,
292 IN EFI_HANDLE
*ChildHandleBuffer
298 ConSplitterSimplePointerDriverBindingStop (
299 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
300 IN EFI_HANDLE ControllerHandle
,
301 IN UINTN NumberOfChildren
,
302 IN EFI_HANDLE
*ChildHandleBuffer
308 ConSplitterConOutDriverBindingStop (
309 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
310 IN EFI_HANDLE ControllerHandle
,
311 IN UINTN NumberOfChildren
,
312 IN EFI_HANDLE
*ChildHandleBuffer
318 ConSplitterStdErrDriverBindingStop (
319 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
320 IN EFI_HANDLE ControllerHandle
,
321 IN UINTN NumberOfChildren
,
322 IN EFI_HANDLE
*ChildHandleBuffer
328 ConSplitterComponentNameGetDriverName (
329 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
331 OUT CHAR16
**DriverName
336 ConSplitterConInComponentNameGetControllerName (
337 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
338 IN EFI_HANDLE ControllerHandle
,
339 IN EFI_HANDLE ChildHandle OPTIONAL
,
341 OUT CHAR16
**ControllerName
346 ConSplitterSimplePointerComponentNameGetControllerName (
347 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
348 IN EFI_HANDLE ControllerHandle
,
349 IN EFI_HANDLE ChildHandle OPTIONAL
,
351 OUT CHAR16
**ControllerName
356 ConSplitterConOutComponentNameGetControllerName (
357 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
358 IN EFI_HANDLE ControllerHandle
,
359 IN EFI_HANDLE ChildHandle OPTIONAL
,
361 OUT CHAR16
**ControllerName
366 ConSplitterStdErrComponentNameGetControllerName (
367 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
368 IN EFI_HANDLE ControllerHandle
,
369 IN EFI_HANDLE ChildHandle OPTIONAL
,
371 OUT CHAR16
**ControllerName
375 // TextIn Constructor/Destructor functions
378 ConSplitterTextInAddDevice (
379 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
380 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL
*TextIn
385 ConSplitterTextInDeleteDevice (
386 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
387 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL
*TextIn
392 // SimplePointer Constuctor/Destructor functions
395 ConSplitterSimplePointerAddDevice (
396 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
397 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
402 ConSplitterSimplePointerDeleteDevice (
403 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
404 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
409 // TextOut Constuctor/Destructor functions
412 ConSplitterTextOutAddDevice (
413 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
414 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*TextOut
,
415 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
416 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
421 ConSplitterTextOutDeleteDevice (
422 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
423 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*TextOut
428 // TextIn I/O Functions
432 ConSplitterTextInReset (
433 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL
*This
,
434 IN BOOLEAN ExtendedVerification
440 ConSplitterTextInReadKeyStroke (
441 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL
*This
,
442 OUT EFI_INPUT_KEY
*Key
448 ConSplitterTextInWaitForKey (
455 ConSpliterConssoleControlStdInLocked (
462 ConSpliterConsoleControlLockStdInEvent (
470 ConSpliterConsoleControlLockStdIn (
471 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
478 ConSplitterTextInPrivateReadKeyStroke (
479 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
480 OUT EFI_INPUT_KEY
*Key
486 ConSplitterSimplePointerReset (
487 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
488 IN BOOLEAN ExtendedVerification
494 ConSplitterSimplePointerGetState (
495 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
496 IN OUT EFI_SIMPLE_POINTER_STATE
*State
502 ConSplitterSimplePointerWaitForInput (
509 // TextOut I/O Functions
512 ConSplitterSynchronizeModeData (
513 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
519 ConSplitterTextOutReset (
520 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
521 IN BOOLEAN ExtendedVerification
527 ConSplitterTextOutOutputString (
528 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
535 ConSplitterTextOutTestString (
536 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
543 ConSplitterTextOutQueryMode (
544 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
553 ConSplitterTextOutSetMode (
554 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
561 ConSplitterTextOutSetAttribute (
562 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
569 ConSplitterTextOutClearScreen (
570 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
576 ConSplitterTextOutSetCursorPosition (
577 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
585 ConSplitterTextOutEnableCursor (
586 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*This
,
592 ConSplitterGrowBuffer (
593 IN UINTN SizeOfCount
,
601 ConSpliterConsoleControlGetMode (
602 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
603 OUT EFI_CONSOLE_CONTROL_SCREEN_MODE
*Mode
,
604 OUT BOOLEAN
*GopExists
,
605 OUT BOOLEAN
*StdInLocked
611 ConSpliterConsoleControlSetMode (
612 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
613 IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
619 ConSpliterGraphicsOutputQueryMode (
620 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
621 IN UINT32 ModeNumber
,
622 OUT UINTN
*SizeOfInfo
,
623 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
**Info
629 ConSpliterGraphicsOutputSetMode (
630 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
* This
,
637 ConSpliterGraphicsOutputBlt (
638 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
639 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*BltBuffer
, OPTIONAL
640 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation
,
643 IN UINTN DestinationX
,
644 IN UINTN DestinationY
,
647 IN UINTN Delta OPTIONAL
653 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
654 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
655 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
661 DevNullTextOutOutputString (
662 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
668 DevNullTextOutSetMode (
669 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
675 DevNullTextOutClearScreen (
676 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
681 DevNullTextOutSetCursorPosition (
682 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
689 DevNullTextOutEnableCursor (
690 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
696 DevNullSyncGopStdOut (
697 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private