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 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 Status
= gBS
->AllocatePool (
169 sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
),
172 if (EFI_ERROR (Status
)) {
176 ZeroMem (Private
, sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
));
178 Private
->Signature
= WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE
;
179 Private
->Handle
= Handle
;
180 Private
->WinNtIo
= WinNtIo
;
181 Private
->WinNtThunk
= WinNtIo
->WinNtThunk
;
183 WinNtSimpleTextOutOpenWindow (Private
);
184 WinNtSimpleTextInAttachToWindow (Private
);
186 Status
= gBS
->InstallMultipleProtocolInterfaces (
188 &gEfiSimpleTextOutProtocolGuid
,
189 &Private
->SimpleTextOut
,
190 &gEfiSimpleTextInProtocolGuid
,
191 &Private
->SimpleTextIn
,
194 if (!EFI_ERROR (Status
)) {
201 &gEfiWinNtIoProtocolGuid
,
202 This
->DriverBindingHandle
,
205 if (Private
!= NULL
) {
207 FreeUnicodeStringTable (Private
->ControllerNameTable
);
209 if (Private
->NtOutHandle
!= NULL
) {
210 Private
->WinNtThunk
->CloseHandle (Private
->NtOutHandle
);
213 if (Private
->SimpleTextIn
.WaitForKey
!= NULL
) {
214 gBS
->CloseEvent (Private
->SimpleTextIn
.WaitForKey
);
217 gBS
->FreePool (Private
);
225 WinNtConsoleDriverBindingStop (
226 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
227 IN EFI_HANDLE Handle
,
228 IN UINTN NumberOfChildren
,
229 IN EFI_HANDLE
*ChildHandleBuffer
235 TODO: Add function description
239 This - TODO: add argument description
240 Handle - TODO: add argument description
241 NumberOfChildren - TODO: add argument description
242 ChildHandleBuffer - TODO: add argument description
246 EFI_UNSUPPORTED - TODO: Add description for return value
250 EFI_SIMPLE_TEXT_OUT_PROTOCOL
*SimpleTextOut
;
252 WIN_NT_SIMPLE_TEXT_PRIVATE_DATA
*Private
;
255 // Kick people off our interface???
257 Status
= gBS
->OpenProtocol (
259 &gEfiSimpleTextOutProtocolGuid
,
261 This
->DriverBindingHandle
,
263 EFI_OPEN_PROTOCOL_GET_PROTOCOL
265 if (EFI_ERROR (Status
)) {
266 return EFI_UNSUPPORTED
;
269 Private
= WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (SimpleTextOut
);
271 ASSERT (Private
->Handle
== Handle
);
273 Status
= gBS
->UninstallMultipleProtocolInterfaces (
275 &gEfiSimpleTextOutProtocolGuid
,
276 &Private
->SimpleTextOut
,
277 &gEfiSimpleTextInProtocolGuid
,
278 &Private
->SimpleTextIn
,
281 if (!EFI_ERROR (Status
)) {
284 // Shut down our device
286 Status
= gBS
->CloseProtocol (
288 &gEfiWinNtIoProtocolGuid
,
289 This
->DriverBindingHandle
,
293 Status
= gBS
->CloseEvent (Private
->SimpleTextIn
.WaitForKey
);
294 ASSERT_EFI_ERROR (Status
);
296 Private
->WinNtThunk
->CloseHandle (Private
->NtOutHandle
);
298 // DO NOT close Private->NtInHandle. It points to StdIn and not
299 // the Private->NtOutHandle is StdIn and should not be closed!
301 FreeUnicodeStringTable (Private
->ControllerNameTable
);
303 gBS
->FreePool (Private
);