]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatform.h
Fix the comments to follow UEFI Spec regarding how to check an EFI_HANDLE is valid...
[mirror_edk2.git] / MdeModulePkg / Universal / Console / ConPlatformDxe / ConPlatform.h
1 /** @file
2 Header file for Console Platfrom DXE Driver.
3
4 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _CON_PLATFORM_H_
16 #define _CON_PLATFORM_H_
17
18 #include <Uefi.h>
19
20 #include <Protocol/SimpleTextOut.h>
21 #include <Protocol/DevicePath.h>
22 #include <Protocol/SimpleTextIn.h>
23 #include <Protocol/PciIo.h>
24 #include <Protocol/GraphicsOutput.h>
25
26 #include <Guid/GlobalVariable.h>
27 #include <Guid/ConsoleInDevice.h>
28 #include <Guid/StandardErrorDevice.h>
29 #include <Guid/ConsoleOutDevice.h>
30
31 #include <Library/DebugLib.h>
32 #include <Library/UefiDriverEntryPoint.h>
33 #include <Library/UefiLib.h>
34 #include <Library/BaseMemoryLib.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/UefiRuntimeServicesTableLib.h>
37 #include <Library/DevicePathLib.h>
38 #include <Library/MemoryAllocationLib.h>
39
40 //
41 // Driver Binding Externs
42 //
43 extern EFI_DRIVER_BINDING_PROTOCOL gConPlatformTextInDriverBinding;
44 extern EFI_COMPONENT_NAME_PROTOCOL gConPlatformComponentName;
45 extern EFI_COMPONENT_NAME2_PROTOCOL gConPlatformComponentName2;
46 extern EFI_DRIVER_BINDING_PROTOCOL gConPlatformTextOutDriverBinding;
47 extern EFI_COMPONENT_NAME_PROTOCOL gConPlatformComponentName;
48 extern EFI_COMPONENT_NAME2_PROTOCOL gConPlatformComponentName2;
49
50
51 typedef enum {
52 Check,
53 Append,
54 Delete
55 } CONPLATFORM_VAR_OPERATION;
56
57 /**
58 Test to see if specific protocol could be supported on the ControllerHandle.
59
60 @param This Protocol instance pointer.
61 @param ControllerHandle Handle of device to test.
62 @param ProtocolGuid The specfic protocol.
63
64 @retval EFI_SUCCESS This driver supports this device
65 @retval other This driver does not support this device
66
67 **/
68 EFI_STATUS
69 ConPlatformDriverBindingSupported (
70 IN EFI_DRIVER_BINDING_PROTOCOL *This,
71 IN EFI_HANDLE ControllerHandle,
72 IN EFI_GUID *ProtocolGuid
73 );
74
75 /**
76 Test to see if EFI_SIMPLE_TEXT_INPUT_PROTOCOL is supported on ControllerHandle.
77
78 @param This Protocol instance pointer.
79 @param ControllerHandle Handle of device to test.
80 @param RemainingDevicePath Optional parameter use to pick a specific child
81 device to start.
82
83 @retval EFI_SUCCESS This driver supports this device.
84 @retval other This driver does not support this device.
85
86 **/
87 EFI_STATUS
88 EFIAPI
89 ConPlatformTextInDriverBindingSupported (
90 IN EFI_DRIVER_BINDING_PROTOCOL *This,
91 IN EFI_HANDLE Handle,
92 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
93 );
94
95 /**
96 Test to see if EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL is supported on ControllerHandle.
97
98 @param This Protocol instance pointer.
99 @param ControllerHandle Handle of device to test.
100 @param RemainingDevicePath Optional parameter use to pick a specific child
101 device to start.
102
103 @retval EFI_SUCCESS This driver supports this device.
104 @retval other This driver does not support this device.
105
106 **/
107 EFI_STATUS
108 EFIAPI
109 ConPlatformTextOutDriverBindingSupported (
110 IN EFI_DRIVER_BINDING_PROTOCOL *This,
111 IN EFI_HANDLE Handle,
112 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
113 );
114
115 /**
116 Start this driver on the device for console input.
117
118 Start this driver on ControllerHandle by opening Simple Text Input Protocol,
119 reading Device Path, and installing Console In Devcice GUID on ControllerHandle.
120
121 If this devcie is not one hot-plug devce, append its device path into the
122 console environment variables ConInDev.
123
124 @param This Protocol instance pointer.
125 @param ControllerHandle Handle of device to bind driver to
126 @param RemainingDevicePath Optional parameter use to pick a specific child
127 device to start.
128
129 @retval EFI_SUCCESS This driver is added to ControllerHandle
130 @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle
131 @retval other This driver does not support this device.
132
133 **/
134 EFI_STATUS
135 EFIAPI
136 ConPlatformTextInDriverBindingStart (
137 IN EFI_DRIVER_BINDING_PROTOCOL *This,
138 IN EFI_HANDLE Handle,
139 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
140 );
141
142 /**
143 Start this driver on the device for console output and stardard error output.
144
145 Start this driver on ControllerHandle by opening Simple Text Output Protocol,
146 reading Device Path, and installing Console Out Devcic GUID, Standard Error
147 Device GUID on ControllerHandle.
148
149 If this devcie is not one hot-plug devce, append its device path into the
150 console environment variables ConOutDev, StdErrDev.
151
152 @param This Protocol instance pointer.
153 @param ControllerHandle Handle of device to bind driver to
154 @param RemainingDevicePath Optional parameter use to pick a specific child
155 device to start.
156
157 @retval EFI_SUCCESS This driver is added to ControllerHandle
158 @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle
159 @retval other This driver does not support this device
160
161 **/
162 EFI_STATUS
163 EFIAPI
164 ConPlatformTextOutDriverBindingStart (
165 IN EFI_DRIVER_BINDING_PROTOCOL *This,
166 IN EFI_HANDLE Handle,
167 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
168 );
169
170 /**
171 Stop this driver on ControllerHandle by removing Console In Devcice GUID
172 and closing the Simple Text Input protocol on ControllerHandle.
173
174 @param This Protocol instance pointer.
175 @param ControllerHandle Handle of device to stop driver on
176 @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of
177 children is zero stop the entire bus driver.
178 @param ChildHandleBuffer List of Child Handles to Stop.
179
180 @retval EFI_SUCCESS This driver is removed ControllerHandle
181 @retval other This driver was not removed from this device
182
183 **/
184 EFI_STATUS
185 EFIAPI
186 ConPlatformTextInDriverBindingStop (
187 IN EFI_DRIVER_BINDING_PROTOCOL *This,
188 IN EFI_HANDLE Handle,
189 IN UINTN NumberOfChildren,
190 IN EFI_HANDLE *ChildHandleBuffer
191 );
192
193 /**
194 Stop this driver on ControllerHandle by removing Console Out Devcice GUID
195 and closing the Simple Text Output protocol on ControllerHandle.
196
197 @param This Protocol instance pointer.
198 @param ControllerHandle Handle of device to stop driver on
199 @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of
200 children is zero stop the entire bus driver.
201 @param ChildHandleBuffer List of Child Handles to Stop.
202
203 @retval EFI_SUCCESS This driver is removed ControllerHandle
204 @retval other This driver was not removed from this device
205
206 **/
207 EFI_STATUS
208 EFIAPI
209 ConPlatformTextOutDriverBindingStop (
210 IN EFI_DRIVER_BINDING_PROTOCOL *This,
211 IN EFI_HANDLE Handle,
212 IN UINTN NumberOfChildren,
213 IN EFI_HANDLE *ChildHandleBuffer
214 );
215
216 /**
217 Uninstall the specified protocol.
218
219 @param This Protocol instance pointer.
220 @param Handle Handle of device to uninstall protocol on.
221 @param ProtocolGuid The specified protocol need to be uninstalled.
222
223 **/
224 VOID
225 ConPlatformUnInstallProtocol (
226 IN EFI_DRIVER_BINDING_PROTOCOL *This,
227 IN EFI_HANDLE Handle,
228 IN EFI_GUID *ProtocolGuid
229 );
230
231 /**
232 Read the EFI variable (Name) and return a dynamically allocated
233 buffer, and the size of the buffer. On failure return NULL.
234
235 @param Name String part of EFI variable name
236
237 @return Dynamically allocated memory that contains a copy of the EFI variable.
238 Caller is repsoncible freeing the buffer. Return NULL means Variable
239 was not read.
240
241 **/
242 VOID *
243 ConPlatformGetVariable (
244 IN CHAR16 *Name
245 );
246
247 /**
248 Function compares a device path data structure to that of all the nodes of a
249 second device path instance.
250
251
252 @param Multi A pointer to a multi-instance device path data structure.
253 @param Single A pointer to a single-instance device path data structure.
254 @param NewDevicePath If Delete is TRUE, this parameter must not be null, and it
255 points to the remaining device path data structure.
256 (remaining device path = Multi - Single.)
257 @param Delete If TRUE, means removing Single from Multi.
258 If FALSE, the routine just check whether Single matches
259 with any instance in Multi.
260
261 @retval EFI_SUCCESS If the Single is contained within Multi.
262 @retval EFI_NOT_FOUND If the Single is not contained within Multi.
263 @retval EFI_INVALID_PARAMETER Multi is NULL.
264 @retval EFI_INVALID_PARAMETER Single is NULL.
265 @retval EFI_INVALID_PARAMETER NewDevicePath is NULL when Delete is TRUE.
266
267 **/
268 EFI_STATUS
269 ConPlatformMatchDevicePaths (
270 IN EFI_DEVICE_PATH_PROTOCOL *Multi,
271 IN EFI_DEVICE_PATH_PROTOCOL *Single,
272 OUT EFI_DEVICE_PATH_PROTOCOL **NewDevicePath OPTIONAL,
273 IN BOOLEAN Delete
274 );
275
276 /**
277 Update console environment variables.
278
279 @param VariableName Console environment variables, ConOutDev, ConInDev
280 StdErrDev, ConIn or ConOut.
281 @param DevicePath Console devcie's device path.
282 @param Operation Variable operations, including APPEND, CHECK and DELETE.
283
284 @retval EFI_SUCCESS Variable operates successfully.
285 @retval EFI_OUT_OF_RESOURCES If variable cannot be appended.
286 @retval other Variable updating failed.
287
288 **/
289 EFI_STATUS
290 ConPlatformUpdateDeviceVariable (
291 IN CHAR16 *VariableName,
292 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
293 IN CONPLATFORM_VAR_OPERATION Operation
294 );
295
296 /**
297 Check if the device supports hot-plug through its device path.
298
299 This function could be updated to check more types of Hot Plug devices.
300 Currently, it checks USB and PCCard device.
301
302 @param DevicePath Pointer to device's device path.
303
304 @retval TRUE The devcie is a hot-plug device
305 @retval FALSE The devcie is not a hot-plug device.
306
307 **/
308 BOOLEAN
309 IsHotPlugDevice (
310 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
311 );
312
313 //
314 // EFI Component Name Functions
315 //
316 /**
317 Retrieves a Unicode string that is the user readable name of the driver.
318
319 This function retrieves the user readable name of a driver in the form of a
320 Unicode string. If the driver specified by This has a user readable name in
321 the language specified by Language, then a pointer to the driver name is
322 returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
323 by This does not support the language specified by Language,
324 then EFI_UNSUPPORTED is returned.
325
326 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
327 EFI_COMPONENT_NAME_PROTOCOL instance.
328 @param Language[in] A pointer to a Null-terminated ASCII string
329 array indicating the language. This is the
330 language of the driver name that the caller is
331 requesting, and it must match one of the
332 languages specified in SupportedLanguages. The
333 number of languages supported by a driver is up
334 to the driver writer. Language is specified
335 in RFC 4646 or ISO 639-2 language code format.
336 @param DriverName[out] A pointer to the Unicode string to return.
337 This Unicode string is the name of the
338 driver specified by This in the language
339 specified by Language.
340
341 @retval EFI_SUCCESS The Unicode string for the Driver specified by
342 This and the language specified by Language was
343 returned in DriverName.
344 @retval EFI_INVALID_PARAMETER Language is NULL.
345 @retval EFI_INVALID_PARAMETER DriverName is NULL.
346 @retval EFI_UNSUPPORTED The driver specified by This does not support
347 the language specified by Language.
348
349 **/
350 EFI_STATUS
351 EFIAPI
352 ConPlatformComponentNameGetDriverName (
353 IN EFI_COMPONENT_NAME_PROTOCOL *This,
354 IN CHAR8 *Language,
355 OUT CHAR16 **DriverName
356 );
357
358
359 /**
360 Retrieves a Unicode string that is the user readable name of the controller
361 that is being managed by a driver.
362
363 This function retrieves the user readable name of the controller specified by
364 ControllerHandle and ChildHandle in the form of a Unicode string. If the
365 driver specified by This has a user readable name in the language specified by
366 Language, then a pointer to the controller name is returned in ControllerName,
367 and EFI_SUCCESS is returned. If the driver specified by This is not currently
368 managing the controller specified by ControllerHandle and ChildHandle,
369 then EFI_UNSUPPORTED is returned. If the driver specified by This does not
370 support the language specified by Language, then EFI_UNSUPPORTED is returned.
371
372 @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
373 EFI_COMPONENT_NAME_PROTOCOL instance.
374 @param ControllerHandle[in] The handle of a controller that the driver
375 specified by This is managing. This handle
376 specifies the controller whose name is to be
377 returned.
378 @param ChildHandle[in] The handle of the child controller to retrieve
379 the name of. This is an optional parameter that
380 may be NULL. It will be NULL for device
381 drivers. It will also be NULL for a bus drivers
382 that wish to retrieve the name of the bus
383 controller. It will not be NULL for a bus
384 driver that wishes to retrieve the name of a
385 child controller.
386 @param Language[in] A pointer to a Null-terminated ASCII string
387 array indicating the language. This is the
388 language of the driver name that the caller is
389 requesting, and it must match one of the
390 languages specified in SupportedLanguages. The
391 number of languages supported by a driver is up
392 to the driver writer. Language is specified in
393 RFC 4646 or ISO 639-2 language code format.
394 @param ControllerName[out] A pointer to the Unicode string to return.
395 This Unicode string is the name of the
396 controller specified by ControllerHandle and
397 ChildHandle in the language specified by
398 Language from the point of view of the driver
399 specified by This.
400
401 @retval EFI_SUCCESS The Unicode string for the user readable name in
402 the language specified by Language for the
403 driver specified by This was returned in
404 DriverName.
405 @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
406 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
407 EFI_HANDLE.
408 @retval EFI_INVALID_PARAMETER Language is NULL.
409 @retval EFI_INVALID_PARAMETER ControllerName is NULL.
410 @retval EFI_UNSUPPORTED The driver specified by This is not currently
411 managing the controller specified by
412 ControllerHandle and ChildHandle.
413 @retval EFI_UNSUPPORTED The driver specified by This does not support
414 the language specified by Language.
415
416 **/
417 EFI_STATUS
418 EFIAPI
419 ConPlatformComponentNameGetControllerName (
420 IN EFI_COMPONENT_NAME_PROTOCOL *This,
421 IN EFI_HANDLE ControllerHandle,
422 IN EFI_HANDLE ChildHandle OPTIONAL,
423 IN CHAR8 *Language,
424 OUT CHAR16 **ControllerName
425 );
426
427 /**
428 Update ConOutDev and ErrOutDev variables to add the device path of
429 GOP controller itself and the sibling controllers.
430
431 @param DevicePath Pointer to device's device path.
432
433 @retval TRUE The devcie is a GOP device.
434 @retval FALSE The devcie is not a GOP device.
435
436 **/
437 BOOLEAN
438 ConPlatformUpdateGopCandidate (
439 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
440 );
441
442 #endif