2 Private data structures for the Console Splitter driver
4 Copyright (c) 2006 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_SPLITER_H_
16 #define _CON_SPLITER_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_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
297 // TextIn Constructor/Destructor functions
300 ConSplitterTextInAddDevice (
301 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
302 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
307 ConSplitterTextInDeleteDevice (
308 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
309 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
314 // SimplePointer Constuctor/Destructor functions
317 ConSplitterSimplePointerAddDevice (
318 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
319 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
324 ConSplitterSimplePointerDeleteDevice (
325 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
326 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
331 // TextOut Constuctor/Destructor functions
334 ConSplitterTextOutAddDevice (
335 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
336 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
,
337 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
338 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
343 ConSplitterTextOutDeleteDevice (
344 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
345 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
350 // TextIn I/O Functions
354 ConSplitterTextInReset (
355 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
356 IN BOOLEAN ExtendedVerification
362 ConSplitterTextInReadKeyStroke (
363 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
364 OUT EFI_INPUT_KEY
*Key
370 ConSplitterTextInWaitForKey (
377 ConSpliterConssoleControlStdInLocked (
384 ConSpliterConsoleControlLockStdInEvent (
392 ConSpliterConsoleControlLockStdIn (
393 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
400 ConSplitterTextInPrivateReadKeyStroke (
401 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
402 OUT EFI_INPUT_KEY
*Key
408 ConSplitterSimplePointerReset (
409 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
410 IN BOOLEAN ExtendedVerification
416 ConSplitterSimplePointerGetState (
417 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
418 IN OUT EFI_SIMPLE_POINTER_STATE
*State
424 ConSplitterSimplePointerWaitForInput (
431 // TextOut I/O Functions
434 ConSplitterSynchronizeModeData (
435 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
441 ConSplitterTextOutReset (
442 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
443 IN BOOLEAN ExtendedVerification
449 ConSplitterTextOutOutputString (
450 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
457 ConSplitterTextOutTestString (
458 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
465 ConSplitterTextOutQueryMode (
466 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
475 ConSplitterTextOutSetMode (
476 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
483 ConSplitterTextOutSetAttribute (
484 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
491 ConSplitterTextOutClearScreen (
492 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
498 ConSplitterTextOutSetCursorPosition (
499 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
507 ConSplitterTextOutEnableCursor (
508 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
514 ConSplitterGrowBuffer (
515 IN UINTN SizeOfCount
,
523 ConSpliterConsoleControlGetMode (
524 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
525 OUT EFI_CONSOLE_CONTROL_SCREEN_MODE
*Mode
,
526 OUT BOOLEAN
*GopExists
,
527 OUT BOOLEAN
*StdInLocked
533 ConSpliterConsoleControlSetMode (
534 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
535 IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
541 ConSpliterGraphicsOutputQueryMode (
542 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
543 IN UINT32 ModeNumber
,
544 OUT UINTN
*SizeOfInfo
,
545 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
**Info
551 ConSpliterGraphicsOutputSetMode (
552 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
* This
,
559 ConSpliterGraphicsOutputBlt (
560 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
561 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*BltBuffer
, OPTIONAL
562 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation
,
565 IN UINTN DestinationX
,
566 IN UINTN DestinationY
,
569 IN UINTN Delta OPTIONAL
575 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
576 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
577 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
581 #if (EFI_SPECIFICATION < 0x00020000)
584 ConSpliterUgaDrawGetMode (
585 IN EFI_UGA_DRAW_PROTOCOL
*This
,
586 OUT UINT32
*HorizontalResolution
,
587 OUT UINT32
*VerticalResolution
,
588 OUT UINT32
*ColorDepth
,
589 OUT UINT32
*RefreshRate
595 ConSpliterUgaDrawSetMode (
596 IN EFI_UGA_DRAW_PROTOCOL
*This
,
597 IN UINT32 HorizontalResolution
,
598 IN UINT32 VerticalResolution
,
599 IN UINT32 ColorDepth
,
600 IN UINT32 RefreshRate
606 ConSpliterUgaDrawBlt (
607 IN EFI_UGA_DRAW_PROTOCOL
*This
,
608 IN EFI_UGA_PIXEL
*BltBuffer
, OPTIONAL
609 IN EFI_UGA_BLT_OPERATION BltOperation
,
612 IN UINTN DestinationX
,
613 IN UINTN DestinationY
,
616 IN UINTN Delta OPTIONAL
622 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
623 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
629 DevNullTextOutOutputString (
630 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
636 DevNullTextOutSetMode (
637 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
643 DevNullTextOutClearScreen (
644 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
649 DevNullTextOutSetCursorPosition (
650 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
657 DevNullTextOutEnableCursor (
658 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
664 DevNullSyncGopStdOut (
665 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private