]> git.proxmox.com Git - mirror_edk2.git/blame - EdkNt32Pkg/Dxe/WinNtThunk/Bus/Console/Console.c
Obsoleted by new schema and new build tools.
[mirror_edk2.git] / EdkNt32Pkg / Dxe / WinNtThunk / Bus / Console / Console.c
CommitLineData
878ddf1f 1/*++\r
2\r
3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12Module Name:\r
13\r
14 Console.c\r
15\r
16Abstract:\r
17\r
18 Console based on Win32 APIs. \r
19\r
20--*/\r
21\r
22#include "Console.h"\r
23\r
24EFI_STATUS\r
25EFIAPI\r
26WinNtConsoleDriverBindingSupported (\r
27 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
28 IN EFI_HANDLE Handle,\r
29 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
30 );\r
31\r
32EFI_STATUS\r
33EFIAPI\r
34WinNtConsoleDriverBindingStart (\r
35 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
36 IN EFI_HANDLE Handle,\r
37 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
38 );\r
39\r
40EFI_STATUS\r
41EFIAPI\r
42WinNtConsoleDriverBindingStop (\r
43 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
44 IN EFI_HANDLE Handle,\r
45 IN UINTN NumberOfChildren,\r
46 IN EFI_HANDLE *ChildHandleBuffer\r
47 );\r
48\r
49EFI_DRIVER_BINDING_PROTOCOL gWinNtConsoleDriverBinding = {\r
50 WinNtConsoleDriverBindingSupported,\r
51 WinNtConsoleDriverBindingStart,\r
52 WinNtConsoleDriverBindingStop,\r
53 0x10,\r
54 NULL,\r
55 NULL\r
56};\r
57\r
58\r
59EFI_STATUS\r
60EFIAPI\r
61WinNtConsoleDriverBindingSupported (\r
62 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
63 IN EFI_HANDLE Handle,\r
64 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
65 )\r
66/*++\r
67\r
68Routine Description:\r
69\r
70Arguments:\r
71\r
72Returns:\r
73\r
74 None\r
75\r
76--*/\r
77// TODO: This - add argument and description to function comment\r
78// TODO: Handle - add argument and description to function comment\r
79// TODO: RemainingDevicePath - add argument and description to function comment\r
80{\r
81 EFI_STATUS Status;\r
82 EFI_WIN_NT_IO_PROTOCOL *WinNtIo;\r
83\r
84 //\r
85 // Open the IO Abstraction(s) needed to perform the supported test\r
86 //\r
87 Status = gBS->OpenProtocol (\r
88 Handle,\r
89 &gEfiWinNtIoProtocolGuid,\r
90 &WinNtIo,\r
91 This->DriverBindingHandle,\r
92 Handle,\r
93 EFI_OPEN_PROTOCOL_BY_DRIVER\r
94 );\r
95 if (EFI_ERROR (Status)) {\r
96 return Status;\r
97 }\r
98\r
99 //\r
100 // Make sure that the WinNt Thunk Protocol is valid\r
101 //\r
102 Status = EFI_UNSUPPORTED;\r
103 if (WinNtIo->WinNtThunk->Signature == EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE) {\r
104\r
105 //\r
106 // Check the GUID to see if this is a handle type the driver supports\r
107 //\r
108 if (CompareGuid (WinNtIo->TypeGuid, &gEfiWinNtConsoleGuid)) {\r
109 Status = EFI_SUCCESS;\r
110 }\r
111 }\r
112\r
113 //\r
114 // Close the I/O Abstraction(s) used to perform the supported test\r
115 //\r
116 gBS->CloseProtocol (\r
117 Handle,\r
118 &gEfiWinNtIoProtocolGuid,\r
119 This->DriverBindingHandle,\r
120 Handle\r
121 );\r
122\r
123 return Status;\r
124}\r
125\r
126EFI_STATUS\r
127EFIAPI\r
128WinNtConsoleDriverBindingStart (\r
129 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
130 IN EFI_HANDLE Handle,\r
131 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
132 )\r
133/*++\r
134\r
135Routine Description:\r
136\r
137Arguments:\r
138\r
139Returns:\r
140\r
141 None\r
142\r
143--*/\r
144// TODO: This - add argument and description to function comment\r
145// TODO: Handle - add argument and description to function comment\r
146// TODO: RemainingDevicePath - add argument and description to function comment\r
147{\r
148 EFI_STATUS Status;\r
149 EFI_WIN_NT_IO_PROTOCOL *WinNtIo;\r
150 WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
151\r
152 //\r
153 // Grab the IO abstraction we need to get any work done\r
154 //\r
155 Status = gBS->OpenProtocol (\r
156 Handle,\r
157 &gEfiWinNtIoProtocolGuid,\r
158 &WinNtIo,\r
159 This->DriverBindingHandle,\r
160 Handle,\r
161 EFI_OPEN_PROTOCOL_BY_DRIVER\r
162 );\r
163 if (EFI_ERROR (Status)) {\r
164 return Status;\r
165 }\r
166\r
167 Status = gBS->AllocatePool (\r
168 EfiBootServicesData,\r
169 sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA),\r
170 &Private\r
171 );\r
172 if (EFI_ERROR (Status)) {\r
173 goto Done;\r
174 }\r
175\r
176 ZeroMem (Private, sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA));\r
177\r
178 Private->Signature = WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE;\r
179 Private->Handle = Handle;\r
180 Private->WinNtIo = WinNtIo;\r
181 Private->WinNtThunk = WinNtIo->WinNtThunk;\r
182\r
183 WinNtSimpleTextOutOpenWindow (Private);\r
184 WinNtSimpleTextInAttachToWindow (Private);\r
185\r
186 Status = gBS->InstallMultipleProtocolInterfaces (\r
187 &Handle,\r
188 &gEfiSimpleTextOutProtocolGuid,\r
189 &Private->SimpleTextOut,\r
190 &gEfiSimpleTextInProtocolGuid,\r
191 &Private->SimpleTextIn,\r
192 NULL\r
193 );\r
194 if (!EFI_ERROR (Status)) {\r
195 return Status;\r
196 }\r
197\r
198Done:\r
199 gBS->CloseProtocol (\r
200 Handle,\r
201 &gEfiWinNtIoProtocolGuid,\r
202 This->DriverBindingHandle,\r
203 Handle\r
204 );\r
205 if (Private != NULL) {\r
206\r
207 FreeUnicodeStringTable (Private->ControllerNameTable);\r
208\r
209 if (Private->NtOutHandle != NULL) {\r
210 Private->WinNtThunk->CloseHandle (Private->NtOutHandle);\r
211 }\r
212\r
213 if (Private->SimpleTextIn.WaitForKey != NULL) {\r
214 gBS->CloseEvent (Private->SimpleTextIn.WaitForKey);\r
215 }\r
216\r
217 gBS->FreePool (Private);\r
218 }\r
219\r
220 return Status;\r
221}\r
222\r
223EFI_STATUS\r
224EFIAPI\r
225WinNtConsoleDriverBindingStop (\r
226 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
227 IN EFI_HANDLE Handle,\r
228 IN UINTN NumberOfChildren,\r
229 IN EFI_HANDLE *ChildHandleBuffer\r
230 )\r
231/*++\r
232\r
233Routine Description:\r
234\r
235 TODO: Add function description\r
236\r
237Arguments:\r
238\r
239 This - TODO: add argument description\r
240 Handle - TODO: add argument description\r
241 NumberOfChildren - TODO: add argument description\r
242 ChildHandleBuffer - TODO: add argument description\r
243\r
244Returns:\r
245\r
246 EFI_UNSUPPORTED - TODO: Add description for return value\r
247\r
248--*/\r
249{\r
250 EFI_SIMPLE_TEXT_OUT_PROTOCOL *SimpleTextOut;\r
251 EFI_STATUS Status;\r
252 WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
253\r
254 //\r
255 // Kick people off our interface???\r
256 //\r
257 Status = gBS->OpenProtocol (\r
258 Handle,\r
259 &gEfiSimpleTextOutProtocolGuid,\r
260 &SimpleTextOut,\r
261 This->DriverBindingHandle,\r
262 Handle,\r
263 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
264 );\r
265 if (EFI_ERROR (Status)) {\r
266 return EFI_UNSUPPORTED;\r
267 }\r
268\r
269 Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (SimpleTextOut);\r
270\r
271 ASSERT (Private->Handle == Handle);\r
272\r
273 Status = gBS->UninstallMultipleProtocolInterfaces (\r
274 Handle,\r
275 &gEfiSimpleTextOutProtocolGuid,\r
276 &Private->SimpleTextOut,\r
277 &gEfiSimpleTextInProtocolGuid,\r
278 &Private->SimpleTextIn,\r
279 NULL\r
280 );\r
281 if (!EFI_ERROR (Status)) {\r
282\r
283 //\r
284 // Shut down our device\r
285 //\r
286 Status = gBS->CloseProtocol (\r
287 Handle,\r
288 &gEfiWinNtIoProtocolGuid,\r
289 This->DriverBindingHandle,\r
290 Handle\r
291 );\r
292\r
293 Status = gBS->CloseEvent (Private->SimpleTextIn.WaitForKey);\r
294 ASSERT_EFI_ERROR (Status);\r
295\r
296 Private->WinNtThunk->CloseHandle (Private->NtOutHandle);\r
297 //\r
298 // DO NOT close Private->NtInHandle. It points to StdIn and not\r
299 // the Private->NtOutHandle is StdIn and should not be closed!\r
300 //\r
301 FreeUnicodeStringTable (Private->ControllerNameTable);\r
302\r
303 gBS->FreePool (Private);\r
304 }\r
305\r
306 return Status;\r
307}\r