3 Copyright (c) 2006 - 2007, 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 Console based on Win32 APIs.
26 WinNtConsoleDriverBindingSupported (
27 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
29 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
34 WinNtConsoleDriverBindingStart (
35 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
37 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
42 WinNtConsoleDriverBindingStop (
43 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
45 IN UINTN NumberOfChildren
,
46 IN EFI_HANDLE
*ChildHandleBuffer
49 EFI_DRIVER_BINDING_PROTOCOL gWinNtConsoleDriverBinding
= {
50 WinNtConsoleDriverBindingSupported
,
51 WinNtConsoleDriverBindingStart
,
52 WinNtConsoleDriverBindingStop
,
61 WinNtConsoleDriverBindingSupported (
62 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
64 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
77 // TODO: This - add argument and description to function comment
78 // TODO: Handle - add argument and description to function comment
79 // TODO: RemainingDevicePath - add argument and description to function comment
82 EFI_WIN_NT_IO_PROTOCOL
*WinNtIo
;
85 // Open the IO Abstraction(s) needed to perform the supported test
87 Status
= gBS
->OpenProtocol (
89 &gEfiWinNtIoProtocolGuid
,
91 This
->DriverBindingHandle
,
93 EFI_OPEN_PROTOCOL_BY_DRIVER
95 if (EFI_ERROR (Status
)) {
100 // Make sure that the WinNt Thunk Protocol is valid
102 Status
= EFI_UNSUPPORTED
;
103 if (WinNtIo
->WinNtThunk
->Signature
== EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE
) {
106 // Check the GUID to see if this is a handle type the driver supports
108 if (CompareGuid (WinNtIo
->TypeGuid
, &gEfiWinNtConsoleGuid
)) {
109 Status
= EFI_SUCCESS
;
114 // Close the I/O Abstraction(s) used to perform the supported test
118 &gEfiWinNtIoProtocolGuid
,
119 This
->DriverBindingHandle
,
128 WinNtConsoleDriverBindingStart (
129 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
130 IN EFI_HANDLE Handle
,
131 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
144 // TODO: This - add argument and description to function comment
145 // TODO: Handle - add argument and description to function comment
146 // TODO: RemainingDevicePath - add argument and description to function comment
149 EFI_WIN_NT_IO_PROTOCOL
*WinNtIo
;
150 WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
*Private
;
153 // Grab the IO abstraction we need to get any work done
155 Status
= gBS
->OpenProtocol (
157 &gEfiWinNtIoProtocolGuid
,
159 This
->DriverBindingHandle
,
161 EFI_OPEN_PROTOCOL_BY_DRIVER
163 if (EFI_ERROR (Status
)) {
167 Private
= AllocatePool (sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
));
168 if (Private
== NULL
) {
172 ZeroMem (Private
, sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
));
174 Private
->Signature
= WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE
;
175 Private
->Handle
= Handle
;
176 Private
->WinNtIo
= WinNtIo
;
177 Private
->WinNtThunk
= WinNtIo
->WinNtThunk
;
179 WinNtSimpleTextOutOpenWindow (Private
);
180 WinNtSimpleTextInAttachToWindow (Private
);
182 Status
= gBS
->InstallMultipleProtocolInterfaces (
184 &gEfiSimpleTextOutProtocolGuid
,
185 &Private
->SimpleTextOut
,
186 &gEfiSimpleTextInProtocolGuid
,
187 &Private
->SimpleTextIn
,
190 if (!EFI_ERROR (Status
)) {
197 &gEfiWinNtIoProtocolGuid
,
198 This
->DriverBindingHandle
,
201 if (Private
!= NULL
) {
203 FreeUnicodeStringTable (Private
->ControllerNameTable
);
205 if (Private
->NtOutHandle
!= NULL
) {
206 Private
->WinNtThunk
->CloseHandle (Private
->NtOutHandle
);
209 if (Private
->SimpleTextIn
.WaitForKey
!= NULL
) {
210 gBS
->CloseEvent (Private
->SimpleTextIn
.WaitForKey
);
221 WinNtConsoleDriverBindingStop (
222 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
223 IN EFI_HANDLE Handle
,
224 IN UINTN NumberOfChildren
,
225 IN EFI_HANDLE
*ChildHandleBuffer
231 TODO: Add function description
235 This - TODO: add argument description
236 Handle - TODO: add argument description
237 NumberOfChildren - TODO: add argument description
238 ChildHandleBuffer - TODO: add argument description
242 EFI_UNSUPPORTED - TODO: Add description for return value
246 EFI_SIMPLE_TEXT_OUT_PROTOCOL
*SimpleTextOut
;
248 WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
*Private
;
251 // Kick people off our interface???
253 Status
= gBS
->OpenProtocol (
255 &gEfiSimpleTextOutProtocolGuid
,
257 This
->DriverBindingHandle
,
259 EFI_OPEN_PROTOCOL_GET_PROTOCOL
261 if (EFI_ERROR (Status
)) {
262 return EFI_UNSUPPORTED
;
265 Private
= WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (SimpleTextOut
);
267 ASSERT (Private
->Handle
== Handle
);
269 Status
= gBS
->UninstallMultipleProtocolInterfaces (
271 &gEfiSimpleTextOutProtocolGuid
,
272 &Private
->SimpleTextOut
,
273 &gEfiSimpleTextInProtocolGuid
,
274 &Private
->SimpleTextIn
,
277 if (!EFI_ERROR (Status
)) {
280 // Shut down our device
282 Status
= gBS
->CloseProtocol (
284 &gEfiWinNtIoProtocolGuid
,
285 This
->DriverBindingHandle
,
289 Status
= gBS
->CloseEvent (Private
->SimpleTextIn
.WaitForKey
);
290 ASSERT_EFI_ERROR (Status
);
292 Private
->WinNtThunk
->CloseHandle (Private
->NtOutHandle
);
294 // DO NOT close Private->NtInHandle. It points to StdIn and not
295 // the Private->NtOutHandle is StdIn and should not be closed!
297 FreeUnicodeStringTable (Private
->ControllerNameTable
);