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_UGA_DRAW_PROTOCOL
*UgaDraw
;
88 EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
;
89 BOOLEAN TextOutEnabled
;
90 } TEXT_OUT_AND_UGA_DATA
;
94 EFI_HANDLE VirtualHandle
;
95 EFI_SIMPLE_TEXT_OUT_PROTOCOL TextOut
;
96 EFI_SIMPLE_TEXT_OUTPUT_MODE TextOutMode
;
97 EFI_UGA_DRAW_PROTOCOL UgaDraw
;
98 UINT32 UgaHorizontalResolution
;
99 UINT32 UgaVerticalResolution
;
100 UINT32 UgaColorDepth
;
101 UINT32 UgaRefreshRate
;
102 EFI_UGA_PIXEL
*UgaBlt
;
104 EFI_CONSOLE_CONTROL_PROTOCOL ConsoleControl
;
106 UINTN CurrentNumberOfConsoles
;
107 TEXT_OUT_AND_UGA_DATA
*TextOutList
;
108 UINTN TextOutListCount
;
109 TEXT_OUT_SPLITTER_QUERY_DATA
*TextOutQueryData
;
110 UINTN TextOutQueryDataCount
;
111 INT32
*TextOutModeMap
;
113 EFI_CONSOLE_CONTROL_SCREEN_MODE UgaMode
;
115 UINTN DevNullColumns
;
117 CHAR16
*DevNullScreen
;
118 INT32
*DevNullAttributes
;
120 } TEXT_OUT_SPLITTER_PRIVATE_DATA
;
122 #define TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
124 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
126 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
129 #define UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
131 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
133 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
136 #define CONSOLE_CONTROL_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \
138 TEXT_OUT_SPLITTER_PRIVATE_DATA, \
140 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \
144 // Function Prototypes
148 ConSplitterDriverEntry (
149 IN EFI_HANDLE ImageHandle
,
150 IN EFI_SYSTEM_TABLE
*SystemTable
156 ConSplitterTextInConstructor (
157 TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
163 ConSplitterTextOutConstructor (
164 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
169 // Driver Binding Functions
174 ConSplitterConInDriverBindingSupported (
175 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
176 IN EFI_HANDLE ControllerHandle
,
177 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
184 ConSplitterSimplePointerDriverBindingSupported (
185 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
186 IN EFI_HANDLE ControllerHandle
,
187 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
194 ConSplitterConOutDriverBindingSupported (
195 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
196 IN EFI_HANDLE ControllerHandle
,
197 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
204 ConSplitterStdErrDriverBindingSupported (
205 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
206 IN EFI_HANDLE ControllerHandle
,
207 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
214 ConSplitterConInDriverBindingStart (
215 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
216 IN EFI_HANDLE ControllerHandle
,
217 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
224 ConSplitterSimplePointerDriverBindingStart (
225 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
226 IN EFI_HANDLE ControllerHandle
,
227 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
234 ConSplitterConOutDriverBindingStart (
235 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
236 IN EFI_HANDLE ControllerHandle
,
237 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
244 ConSplitterStdErrDriverBindingStart (
245 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
246 IN EFI_HANDLE ControllerHandle
,
247 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
254 ConSplitterConInDriverBindingStop (
255 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
256 IN EFI_HANDLE ControllerHandle
,
257 IN UINTN NumberOfChildren
,
258 IN EFI_HANDLE
*ChildHandleBuffer
265 ConSplitterSimplePointerDriverBindingStop (
266 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
267 IN EFI_HANDLE ControllerHandle
,
268 IN UINTN NumberOfChildren
,
269 IN EFI_HANDLE
*ChildHandleBuffer
276 ConSplitterConOutDriverBindingStop (
277 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
278 IN EFI_HANDLE ControllerHandle
,
279 IN UINTN NumberOfChildren
,
280 IN EFI_HANDLE
*ChildHandleBuffer
287 ConSplitterStdErrDriverBindingStop (
288 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
289 IN EFI_HANDLE ControllerHandle
,
290 IN UINTN NumberOfChildren
,
291 IN EFI_HANDLE
*ChildHandleBuffer
296 // TextIn Constructor/Destructor functions
299 ConSplitterTextInAddDevice (
300 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
301 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
306 ConSplitterTextInDeleteDevice (
307 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
308 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*TextIn
313 // SimplePointer Constuctor/Destructor functions
316 ConSplitterSimplePointerAddDevice (
317 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
318 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
323 ConSplitterSimplePointerDeleteDevice (
324 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
325 IN EFI_SIMPLE_POINTER_PROTOCOL
*SimplePointer
330 // TextOut Constuctor/Destructor functions
333 ConSplitterTextOutAddDevice (
334 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
335 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
,
336 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
341 ConSplitterTextOutDeleteDevice (
342 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
343 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*TextOut
348 // TextIn I/O Functions
352 ConSplitterTextInReset (
353 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
354 IN BOOLEAN ExtendedVerification
360 ConSplitterTextInReadKeyStroke (
361 IN EFI_SIMPLE_TEXT_IN_PROTOCOL
*This
,
362 OUT EFI_INPUT_KEY
*Key
368 ConSplitterTextInWaitForKey (
375 ConSpliterConssoleControlStdInLocked (
382 ConSpliterConsoleControlLockStdInEvent (
390 ConSpliterConsoleControlLockStdIn (
391 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
398 ConSplitterTextInPrivateReadKeyStroke (
399 IN TEXT_IN_SPLITTER_PRIVATE_DATA
*Private
,
400 OUT EFI_INPUT_KEY
*Key
406 ConSplitterSimplePointerReset (
407 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
408 IN BOOLEAN ExtendedVerification
414 ConSplitterSimplePointerGetState (
415 IN EFI_SIMPLE_POINTER_PROTOCOL
*This
,
416 IN OUT EFI_SIMPLE_POINTER_STATE
*State
422 ConSplitterSimplePointerWaitForInput (
429 // TextOut I/O Functions
432 ConSplitterSynchronizeModeData (
433 TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
439 ConSplitterTextOutReset (
440 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
441 IN BOOLEAN ExtendedVerification
447 ConSplitterTextOutOutputString (
448 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
455 ConSplitterTextOutTestString (
456 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
463 ConSplitterTextOutQueryMode (
464 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
473 ConSplitterTextOutSetMode (
474 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
481 ConSplitterTextOutSetAttribute (
482 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
489 ConSplitterTextOutClearScreen (
490 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
496 ConSplitterTextOutSetCursorPosition (
497 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
505 ConSplitterTextOutEnableCursor (
506 IN EFI_SIMPLE_TEXT_OUT_PROTOCOL
*This
,
512 ConSplitterGrowBuffer (
513 IN UINTN SizeOfCount
,
521 ConSpliterConsoleControlGetMode (
522 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
523 OUT EFI_CONSOLE_CONTROL_SCREEN_MODE
*Mode
,
524 OUT BOOLEAN
*UgaExists
,
525 OUT BOOLEAN
*StdInLocked
531 ConSpliterConsoleControlSetMode (
532 IN EFI_CONSOLE_CONTROL_PROTOCOL
*This
,
533 IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode
539 ConSpliterUgaDrawGetMode (
540 IN EFI_UGA_DRAW_PROTOCOL
*This
,
541 OUT UINT32
*HorizontalResolution
,
542 OUT UINT32
*VerticalResolution
,
543 OUT UINT32
*ColorDepth
,
544 OUT UINT32
*RefreshRate
550 ConSpliterUgaDrawSetMode (
551 IN EFI_UGA_DRAW_PROTOCOL
*This
,
552 IN UINT32 HorizontalResolution
,
553 IN UINT32 VerticalResolution
,
554 IN UINT32 ColorDepth
,
555 IN UINT32 RefreshRate
561 ConSpliterUgaDrawBlt (
562 IN EFI_UGA_DRAW_PROTOCOL
*This
,
563 IN EFI_UGA_PIXEL
*BltBuffer
, OPTIONAL
564 IN EFI_UGA_BLT_OPERATION BltOperation
,
567 IN UINTN DestinationX
,
568 IN UINTN DestinationY
,
571 IN UINTN Delta OPTIONAL
577 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
578 IN EFI_UGA_DRAW_PROTOCOL
*UgaDraw
583 DevNullTextOutOutputString (
584 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
590 DevNullTextOutSetMode (
591 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
597 DevNullTextOutClearScreen (
598 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
603 DevNullTextOutSetCursorPosition (
604 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
611 DevNullTextOutEnableCursor (
612 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private
,
618 DevNullSyncUgaStdOut (
619 IN TEXT_OUT_SPLITTER_PRIVATE_DATA
*Private