3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 Private data structures for the Console Splitter driver
26 // Private Data Structures
28 #define CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT 32
29 #define CONSOLE_SPLITTER_MODES_ALLOC_UNIT 32
30 #define MAX_STD_IN_PASSWORD 80
35 } TEXT_OUT_SPLITTER_QUERY_DATA
;
38 // Private data for the EFI_SIMPLE_INPUT_PROTOCOL splitter
40 #define TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'p')
44 EFI_HANDLE VirtualHandle
;
46 EFI_SIMPLE_TEXT_IN_PROTOCOL TextIn
;
47 UINTN CurrentNumberOfConsoles
;
48 EFI_SIMPLE_TEXT_IN_PROTOCOL
**TextInList
;
49 UINTN TextInListCount
;
51 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer
;
52 EFI_SIMPLE_POINTER_MODE SimplePointerMode
;
53 UINTN CurrentNumberOfPointers
;
54 EFI_SIMPLE_POINTER_PROTOCOL
**PointerList
;
55 UINTN PointerListCount
;
57 BOOLEAN PasswordEnabled
;
58 CHAR16 Password
[MAX_STD_IN_PASSWORD
];
60 CHAR16 PwdAttempt
[MAX_STD_IN_PASSWORD
];
63 BOOLEAN KeyEventSignalState
;
64 BOOLEAN InputEventSignalState
;
65 } TEXT_IN_SPLITTER_PRIVATE_DATA
;
67 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
69 TEXT_IN_SPLITTER_PRIVATE_DATA, \
71 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \
74 #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS(a) \
76 TEXT_IN_SPLITTER_PRIVATE_DATA, \
78 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \
82 // Private data for the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL splitter
84 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'o', 'S', 'p')
87 EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
;
88 EFI_UGA_DRAW_PROTOCOL
*UgaDraw
;
89 EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
;
90 BOOLEAN TextOutEnabled
;
91 } TEXT_OUT_AND_GOP_DATA
;
94 UINT32 HorizontalResolution
;
95 UINT32 VerticalResolution
;
100 EFI_HANDLE VirtualHandle
;
101 EFI_SIMPLE_TEXT_OUT_PROTOCOL TextOut
;
102 EFI_SIMPLE_TEXT_OUTPUT_MODE TextOutMode
;
104 #if (EFI_SPECIFICATION_VERSION < 0x00020000)
105 EFI_UGA_DRAW_PROTOCOL UgaDraw
;
106 UINT32 UgaHorizontalResolution
;
107 UINT32 UgaVerticalResolution
;
108 UINT32 UgaColorDepth
;
109 UINT32 UgaRefreshRate
;
110 EFI_UGA_PIXEL
*UgaBlt
;
112 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput
;
113 EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*GraphicsOutputBlt
;
114 TEXT_OUT_GOP_MODE
*GraphicsOutputModeBuffer
;
115 UINTN CurrentNumberOfGraphicsOutput
;
116 BOOLEAN HardwareNeedsStarting
;
119 EFI_CONSOLE_CONTROL_PROTOCOL ConsoleControl
;
121 UINTN CurrentNumberOfConsoles
;
122 TEXT_OUT_AND_GOP_DATA
*TextOutList
;
123 UINTN TextOutListCount
;
124 TEXT_OUT_SPLITTER_QUERY_DATA
*TextOutQueryData
;
125 UINTN TextOutQueryDataCount
;
126 INT32
*TextOutModeMap
;
128 EFI_CONSOLE_CONTROL_SCREEN_MODE ConsoleOutputMode
;
130 UINTN DevNullColumns
;
132 CHAR16
*DevNullScreen
;
133 INT32
*DevNullAttributes
;
135 } TEXT_OUT_SPLITTER_PRIVATE_DATA
;
137 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
139 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
141 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
144 #define GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
146 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
148 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
151 #define UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
153 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
155 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
158 #define CONSOLE_CONTROL_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
160 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
162 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
166 // Function Prototypes
170 ConSplitterDriverEntry (
171 IN EFI_HANDLE ImageHandle
,
172 IN EFI_SYSTEM_TABLE
*SystemTable
178 ConSplitterTextInConstructor (
179 TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
185 ConSplitterTextOutConstructor (
186 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
191 // Driver Binding Functions
196 ConSplitterConInDriverBindingSupported (
197 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
198 IN EFI_HANDLE ControllerHandle
,
199 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
206 ConSplitterSimplePointerDriverBindingSupported (
207 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
208 IN EFI_HANDLE ControllerHandle
,
209 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
216 ConSplitterConOutDriverBindingSupported (
217 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
218 IN EFI_HANDLE ControllerHandle
,
219 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
226 ConSplitterStdErrDriverBindingSupported (
227 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
228 IN EFI_HANDLE ControllerHandle
,
229 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
236 ConSplitterConInDriverBindingStart (
237 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
238 IN EFI_HANDLE ControllerHandle
,
239 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
246 ConSplitterSimplePointerDriverBindingStart (
247 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
248 IN EFI_HANDLE ControllerHandle
,
249 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
256 ConSplitterConOutDriverBindingStart (
257 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
258 IN EFI_HANDLE ControllerHandle
,
259 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
266 ConSplitterStdErrDriverBindingStart (
267 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
268 IN EFI_HANDLE ControllerHandle
,
269 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
276 ConSplitterConInDriverBindingStop (
277 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
278 IN EFI_HANDLE ControllerHandle
,
279 IN UINTN NumberOfChildren
,
280 IN EFI_HANDLE
*ChildHandleBuffer
287 ConSplitterSimplePointerDriverBindingStop (
288 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
289 IN EFI_HANDLE ControllerHandle
,
290 IN UINTN NumberOfChildren
,
291 IN EFI_HANDLE
*ChildHandleBuffer
298 ConSplitterConOutDriverBindingStop (
299 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
300 IN EFI_HANDLE ControllerHandle
,
301 IN UINTN NumberOfChildren
,
302 IN EFI_HANDLE
*ChildHandleBuffer
309 ConSplitterStdErrDriverBindingStop (
310 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
311 IN EFI_HANDLE ControllerHandle
,
312 IN UINTN NumberOfChildren
,
313 IN EFI_HANDLE
*ChildHandleBuffer
318 // TextIn Constructor/Destructor functions
321 ConSplitterTextInAddDevice (
322 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
323 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
328 ConSplitterTextInDeleteDevice (
329 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
330 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
335 // SimplePointer Constuctor/Destructor functions
338 ConSplitterSimplePointerAddDevice (
339 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
340 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
345 ConSplitterSimplePointerDeleteDevice (
346 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
347 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
352 // TextOut Constuctor/Destructor functions
355 ConSplitterTextOutAddDevice (
356 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
357 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
,
358 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
359 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
364 ConSplitterTextOutDeleteDevice (
365 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
366 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
371 // TextIn I/O Functions
375 ConSplitterTextInReset (
376 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
377 IN BOOLEAN ExtendedVerification
383 ConSplitterTextInReadKeyStroke (
384 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
385 OUT EFI_INPUT_KEY
*Key
391 ConSplitterTextInWaitForKey (
398 ConSpliterConssoleControlStdInLocked (
405 ConSpliterConsoleControlLockStdInEvent (
413 ConSpliterConsoleControlLockStdIn (
414 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
421 ConSplitterTextInPrivateReadKeyStroke (
422 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
423 OUT EFI_INPUT_KEY
*Key
429 ConSplitterSimplePointerReset (
430 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
431 IN BOOLEAN ExtendedVerification
437 ConSplitterSimplePointerGetState (
438 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
439 IN OUT EFI_SIMPLE_POINTER_STATE
*State
445 ConSplitterSimplePointerWaitForInput (
452 // TextOut I/O Functions
455 ConSplitterSynchronizeModeData (
456 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
462 ConSplitterTextOutReset (
463 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
464 IN BOOLEAN ExtendedVerification
470 ConSplitterTextOutOutputString (
471 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
478 ConSplitterTextOutTestString (
479 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
486 ConSplitterTextOutQueryMode (
487 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
496 ConSplitterTextOutSetMode (
497 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
504 ConSplitterTextOutSetAttribute (
505 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
512 ConSplitterTextOutClearScreen (
513 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
519 ConSplitterTextOutSetCursorPosition (
520 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
528 ConSplitterTextOutEnableCursor (
529 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
535 ConSplitterGrowBuffer (
536 IN UINTN SizeOfCount
,
544 ConSpliterConsoleControlGetMode (
545 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
546 OUT EFI_CONSOLE_CONTROL_SCREEN_MODE
*Mode
,
547 OUT BOOLEAN
*GopExists
,
548 OUT BOOLEAN
*StdInLocked
554 ConSpliterConsoleControlSetMode (
555 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
556 IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
562 ConSpliterGraphicsOutputQueryMode (
563 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
564 IN UINT32 ModeNumber
,
565 OUT UINTN
*SizeOfInfo
,
566 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
**Info
572 ConSpliterGraphicsOutputSetMode (
573 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
* This
,
580 ConSpliterGraphicsOutputBlt (
581 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*This
,
582 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*BltBuffer
, OPTIONAL
583 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation
,
586 IN UINTN DestinationX
,
587 IN UINTN DestinationY
,
590 IN UINTN Delta OPTIONAL
596 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
597 IN EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
,
598 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
602 #if (EFI_SPECIFICATION < 0x00020000)
605 ConSpliterUgaDrawGetMode (
606 IN EFI_UGA_DRAW_PROTOCOL
*This
,
607 OUT UINT32
*HorizontalResolution
,
608 OUT UINT32
*VerticalResolution
,
609 OUT UINT32
*ColorDepth
,
610 OUT UINT32
*RefreshRate
616 ConSpliterUgaDrawSetMode (
617 IN EFI_UGA_DRAW_PROTOCOL
*This
,
618 IN UINT32 HorizontalResolution
,
619 IN UINT32 VerticalResolution
,
620 IN UINT32 ColorDepth
,
621 IN UINT32 RefreshRate
627 ConSpliterUgaDrawBlt (
628 IN EFI_UGA_DRAW_PROTOCOL
*This
,
629 IN EFI_UGA_PIXEL
*BltBuffer
, OPTIONAL
630 IN EFI_UGA_BLT_OPERATION BltOperation
,
633 IN UINTN DestinationX
,
634 IN UINTN DestinationY
,
637 IN UINTN Delta OPTIONAL
643 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
644 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
650 DevNullTextOutOutputString (
651 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
657 DevNullTextOutSetMode (
658 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
664 DevNullTextOutClearScreen (
665 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
670 DevNullTextOutSetCursorPosition (
671 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
678 DevNullTextOutEnableCursor (
679 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
685 DevNullSyncGopStdOut (
686 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private