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 // Private Data Structures
21 #define CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT 32
22 #define CONSOLE_SPLITTER_MODES_ALLOC_UNIT 32
23 #define MAX_STD_IN_PASSWORD 80
28 } TEXT_OUT_SPLITTER_QUERY_DATA
;
31 // Private data for the EFI_SIMPLE_TEXT_INPUT_PROTOCOL splitter
33 #define TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'p')
37 EFI_HANDLE VirtualHandle
;
39 EFI_SIMPLE_TEXT_IN_PROTOCOL TextIn
;
40 UINTN CurrentNumberOfConsoles
;
41 EFI_SIMPLE_TEXT_IN_PROTOCOL
**TextInList
;
42 UINTN TextInListCount
;
44 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer
;
45 EFI_SIMPLE_POINTER_MODE SimplePointerMode
;
46 UINTN CurrentNumberOfPointers
;
47 EFI_SIMPLE_POINTER_PROTOCOL
**PointerList
;
48 UINTN PointerListCount
;
50 BOOLEAN PasswordEnabled
;
51 CHAR16 Password
[MAX_STD_IN_PASSWORD
];
53 CHAR16 PwdAttempt
[MAX_STD_IN_PASSWORD
];
56 BOOLEAN KeyEventSignalState
;
57 BOOLEAN InputEventSignalState
;
58 } TEXT_IN_SPLITTER_PRIVATE_DATA
;
60 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
62 TEXT_IN_SPLITTER_PRIVATE_DATA, \
64 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \
67 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS(a) \
69 TEXT_IN_SPLITTER_PRIVATE_DATA, \
71 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \
75 // Private data for the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL splitter
77 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'o', 'S', 'p')
80 EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
;
81 EFI_UGA_DRAW_PROTOCOL
*UgaDraw
;
82 EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
;
83 BOOLEAN TextOutEnabled
;
84 } TEXT_OUT_AND_GOP_DATA
;
87 UINT32 HorizontalResolution
;
88 UINT32 VerticalResolution
;
93 EFI_HANDLE VirtualHandle
;
94 EFI_SIMPLE_TEXT_OUT_PROTOCOL TextOut
;
95 EFI_SIMPLE_TEXT_OUTPUT_MODE TextOutMode
;
97 #if (EFI_SPECIFICATION_VERSION < 0x00020000)
98 EFI_UGA_DRAW_PROTOCOL UgaDraw
;
99 UINT32 UgaHorizontalResolution
;
100 UINT32 UgaVerticalResolution
;
101 UINT32 UgaColorDepth
;
102 UINT32 UgaRefreshRate
;
103 EFI_UGA_PIXEL
*UgaBlt
;
105 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput
;
106 EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*GraphicsOutputBlt
;
107 TEXT_OUT_GOP_MODE
*GraphicsOutputModeBuffer
;
108 UINTN CurrentNumberOfGraphicsOutput
;
109 BOOLEAN HardwareNeedsStarting
;
112 EFI_CONSOLE_CONTROL_PROTOCOL ConsoleControl
;
114 UINTN CurrentNumberOfConsoles
;
115 TEXT_OUT_AND_GOP_DATA
*TextOutList
;
116 UINTN TextOutListCount
;
117 TEXT_OUT_SPLITTER_QUERY_DATA
*TextOutQueryData
;
118 UINTN TextOutQueryDataCount
;
119 INT32
*TextOutModeMap
;
121 EFI_CONSOLE_CONTROL_SCREEN_MODE ConsoleOutputMode
;
123 UINTN DevNullColumns
;
125 CHAR16
*DevNullScreen
;
126 INT32
*DevNullAttributes
;
128 } TEXT_OUT_SPLITTER_PRIVATE_DATA
;
130 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
132 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
134 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
137 #define GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
139 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
141 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
144 #define UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
146 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
148 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
151 #define CONSOLE_CONTROL_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
153 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
155 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
159 // Function Prototypes
163 ConSplitterDriverEntry (
164 IN EFI_HANDLE ImageHandle
,
165 IN EFI_SYSTEM_TABLE
*SystemTable
170 ConSplitterTextInConstructor (
171 TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
176 ConSplitterTextOutConstructor (
177 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
182 // Driver Binding Functions
186 ConSplitterConInDriverBindingSupported (
187 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
188 IN EFI_HANDLE ControllerHandle
,
189 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
195 ConSplitterSimplePointerDriverBindingSupported (
196 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
197 IN EFI_HANDLE ControllerHandle
,
198 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
204 ConSplitterConOutDriverBindingSupported (
205 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
206 IN EFI_HANDLE ControllerHandle
,
207 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
213 ConSplitterStdErrDriverBindingSupported (
214 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
215 IN EFI_HANDLE ControllerHandle
,
216 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
222 ConSplitterConInDriverBindingStart (
223 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
224 IN EFI_HANDLE ControllerHandle
,
225 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
231 ConSplitterSimplePointerDriverBindingStart (
232 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
233 IN EFI_HANDLE ControllerHandle
,
234 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
240 ConSplitterConOutDriverBindingStart (
241 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
242 IN EFI_HANDLE ControllerHandle
,
243 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
249 ConSplitterStdErrDriverBindingStart (
250 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
251 IN EFI_HANDLE ControllerHandle
,
252 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
258 ConSplitterConInDriverBindingStop (
259 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
260 IN EFI_HANDLE ControllerHandle
,
261 IN UINTN NumberOfChildren
,
262 IN EFI_HANDLE
*ChildHandleBuffer
268 ConSplitterSimplePointerDriverBindingStop (
269 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
270 IN EFI_HANDLE ControllerHandle
,
271 IN UINTN NumberOfChildren
,
272 IN EFI_HANDLE
*ChildHandleBuffer
278 ConSplitterConOutDriverBindingStop (
279 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
280 IN EFI_HANDLE ControllerHandle
,
281 IN UINTN NumberOfChildren
,
282 IN EFI_HANDLE
*ChildHandleBuffer
288 ConSplitterStdErrDriverBindingStop (
289 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
290 IN EFI_HANDLE ControllerHandle
,
291 IN UINTN NumberOfChildren
,
292 IN EFI_HANDLE
*ChildHandleBuffer
298 ConSplitterComponentNameGetDriverName (
299 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
301 OUT CHAR16
**DriverName
306 ConSplitterConInComponentNameGetControllerName (
307 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
308 IN EFI_HANDLE ControllerHandle
,
309 IN EFI_HANDLE ChildHandle OPTIONAL
,
311 OUT CHAR16
**ControllerName
316 ConSplitterSimplePointerComponentNameGetControllerName (
317 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
318 IN EFI_HANDLE ControllerHandle
,
319 IN EFI_HANDLE ChildHandle OPTIONAL
,
321 OUT CHAR16
**ControllerName
326 ConSplitterConOutComponentNameGetControllerName (
327 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
328 IN EFI_HANDLE ControllerHandle
,
329 IN EFI_HANDLE ChildHandle OPTIONAL
,
331 OUT CHAR16
**ControllerName
336 ConSplitterStdErrComponentNameGetControllerName (
337 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
338 IN EFI_HANDLE ControllerHandle
,
339 IN EFI_HANDLE ChildHandle OPTIONAL
,
341 OUT CHAR16
**ControllerName
345 // TextIn Constructor/Destructor functions
348 ConSplitterTextInAddDevice (
349 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
350 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
355 ConSplitterTextInDeleteDevice (
356 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
357 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
362 // SimplePointer Constuctor/Destructor functions
365 ConSplitterSimplePointerAddDevice (
366 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
367 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
372 ConSplitterSimplePointerDeleteDevice (
373 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
374 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
379 // TextOut Constuctor/Destructor functions
382 ConSplitterTextOutAddDevice (
383 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
384 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
,
385 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
386 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
391 ConSplitterTextOutDeleteDevice (
392 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
393 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
398 // TextIn I/O Functions
402 ConSplitterTextInReset (
403 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
404 IN BOOLEAN ExtendedVerification
410 ConSplitterTextInReadKeyStroke (
411 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
412 OUT EFI_INPUT_KEY
*Key
418 ConSplitterTextInWaitForKey (
425 ConSpliterConssoleControlStdInLocked (
432 ConSpliterConsoleControlLockStdInEvent (
440 ConSpliterConsoleControlLockStdIn (
441 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
448 ConSplitterTextInPrivateReadKeyStroke (
449 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
450 OUT EFI_INPUT_KEY
*Key
456 ConSplitterSimplePointerReset (
457 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
458 IN BOOLEAN ExtendedVerification
464 ConSplitterSimplePointerGetState (
465 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
466 IN OUT EFI_SIMPLE_POINTER_STATE
*State
472 ConSplitterSimplePointerWaitForInput (
479 // TextOut I/O Functions
482 ConSplitterSynchronizeModeData (
483 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
489 ConSplitterTextOutReset (
490 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
491 IN BOOLEAN ExtendedVerification
497 ConSplitterTextOutOutputString (
498 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
505 ConSplitterTextOutTestString (
506 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
513 ConSplitterTextOutQueryMode (
514 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
523 ConSplitterTextOutSetMode (
524 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
531 ConSplitterTextOutSetAttribute (
532 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
539 ConSplitterTextOutClearScreen (
540 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
546 ConSplitterTextOutSetCursorPosition (
547 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
555 ConSplitterTextOutEnableCursor (
556 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
562 ConSplitterGrowBuffer (
563 IN UINTN SizeOfCount
,
571 ConSpliterConsoleControlGetMode (
572 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
573 OUT EFI_CONSOLE_CONTROL_SCREEN_MODE
*Mode
,
574 OUT BOOLEAN
*GopExists
,
575 OUT BOOLEAN
*StdInLocked
581 ConSpliterConsoleControlSetMode (
582 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
583 IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
589 ConSpliterGraphicsOutputQueryMode (
590 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
591 IN UINT32 ModeNumber
,
592 OUT UINTN
*SizeOfInfo
,
593 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
**Info
599 ConSpliterGraphicsOutputSetMode (
600 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
* This
,
607 ConSpliterGraphicsOutputBlt (
608 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
609 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*BltBuffer
, OPTIONAL
610 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation
,
613 IN UINTN DestinationX
,
614 IN UINTN DestinationY
,
617 IN UINTN Delta OPTIONAL
623 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
624 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
625 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
629 #if (EFI_SPECIFICATION_VERSION < 0x00020000)
632 ConSpliterUgaDrawGetMode (
633 IN EFI_UGA_DRAW_PROTOCOL
*This
,
634 OUT UINT32
*HorizontalResolution
,
635 OUT UINT32
*VerticalResolution
,
636 OUT UINT32
*ColorDepth
,
637 OUT UINT32
*RefreshRate
643 ConSpliterUgaDrawSetMode (
644 IN EFI_UGA_DRAW_PROTOCOL
*This
,
645 IN UINT32 HorizontalResolution
,
646 IN UINT32 VerticalResolution
,
647 IN UINT32 ColorDepth
,
648 IN UINT32 RefreshRate
654 ConSpliterUgaDrawBlt (
655 IN EFI_UGA_DRAW_PROTOCOL
*This
,
656 IN EFI_UGA_PIXEL
*BltBuffer
, OPTIONAL
657 IN EFI_UGA_BLT_OPERATION BltOperation
,
660 IN UINTN DestinationX
,
661 IN UINTN DestinationY
,
664 IN UINTN Delta OPTIONAL
670 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
671 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
677 DevNullTextOutOutputString (
678 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
684 DevNullTextOutSetMode (
685 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
691 DevNullTextOutClearScreen (
692 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
697 DevNullTextOutSetCursorPosition (
698 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
705 DevNullTextOutEnableCursor (
706 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
712 DevNullSyncGopStdOut (
713 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private