]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Library/GenericBdsLib.h
UEFI HII: Merge UEFI HII support changes from branch.
[mirror_edk2.git] / MdeModulePkg / Include / Library / GenericBdsLib.h
1 /*++
2
3 Copyright (c) 2004 - 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
8
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.
11
12 Module Name:
13
14 GenericBdsLib.h
15
16 Abstract:
17
18 Generic BDS library definition, include the file and data structure
19
20 --*/
21
22 #ifndef _GENERIC_BDS_LIB_H_
23 #define _GENERIC_BDS_LIB_H_
24
25 //
26 // WQBugBug: These Macro will be handled properly later.
27 //
28 //#undef EFI_SPECIFICATION_VERSION
29 //#define EFI_SPECIFICATION_VERSION 0x0002000A
30
31 #define PI_SPECIFICATION_VERSION 0x00010000
32
33 #include <PiDxe.h>
34 #include <Protocol/HiiDatabase.h>
35 #include <IndustryStandard/PeImage.h>
36
37
38 extern EFI_HANDLE mBdsImageHandle;
39
40 //
41 // Constants which are variable names used to access variables
42 //
43 #define VarLegacyDevOrder L"LegacyDevOrder"
44
45 //
46 // Data structures and defines
47 //
48 #define FRONT_PAGE_QUESTION_ID 0x0000
49 #define FRONT_PAGE_DATA_WIDTH 0x01
50
51 //
52 // ConnectType
53 //
54 #define CONSOLE_OUT 0x00000001
55 #define STD_ERROR 0x00000002
56 #define CONSOLE_IN 0x00000004
57 #define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
58
59 //
60 // Load Option Attributes defined in EFI Specification
61 //
62 #define LOAD_OPTION_ACTIVE 0x00000001
63 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
64
65 #if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
66 #define LOAD_OPTION_HIDDEN 0x00000008
67 #define LOAD_OPTION_CATEGORY 0x00001F00
68
69 #define LOAD_OPTION_CATEGORY_BOOT 0x00000000
70 #define LOAD_OPTION_CATEGORY_APP 0x00000100
71
72 #define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001
73 #define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002
74 #endif
75
76 #define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0)
77
78 //
79 // Define Maxmim characters that will be accepted
80 //
81 #define MAX_CHAR 480
82 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
83
84 #define MIN_ALIGNMENT_SIZE 4
85 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
86
87 //
88 // Define maximum characters for boot option variable "BootXXXX"
89 //
90 #define BOOT_OPTION_MAX_CHAR 10
91
92 //
93 // This data structure is the part of BDS_CONNECT_ENTRY that we can hard code.
94 //
95 #define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O')
96
97 typedef struct {
98
99 UINTN Signature;
100 LIST_ENTRY Link;
101
102 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
103
104 CHAR16 *OptionName;
105 UINTN OptionNumber;
106 UINT16 BootCurrent;
107 UINT32 Attribute;
108 CHAR16 *Description;
109 VOID *LoadOptions;
110 UINT32 LoadOptionsSize;
111 CHAR16 *StatusString;
112
113 } BDS_COMMON_OPTION;
114
115 typedef struct {
116 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
117 UINTN ConnectType;
118 } BDS_CONSOLE_CONNECT_ENTRY;
119
120 //
121 // Lib Functions
122 //
123
124 //
125 // Bds boot relate lib functions
126 //
127 EFI_STATUS
128 BdsLibUpdateBootOrderList (
129 IN LIST_ENTRY *BdsOptionList,
130 IN CHAR16 *VariableName
131 );
132
133 VOID
134 BdsLibBootNext (
135 VOID
136 );
137
138 EFI_STATUS
139 BdsLibBootViaBootOption (
140 IN BDS_COMMON_OPTION * Option,
141 IN EFI_DEVICE_PATH_PROTOCOL * DevicePath,
142 OUT UINTN *ExitDataSize,
143 OUT CHAR16 **ExitData OPTIONAL
144 );
145
146 EFI_STATUS
147 BdsLibEnumerateAllBootOption (
148 IN OUT LIST_ENTRY *BdsBootOptionList
149 );
150
151 VOID
152 BdsLibBuildOptionFromHandle (
153 IN EFI_HANDLE Handle,
154 IN LIST_ENTRY *BdsBootOptionList,
155 IN CHAR16 *String
156 );
157
158 VOID
159 BdsLibBuildOptionFromShell (
160 IN EFI_HANDLE Handle,
161 IN LIST_ENTRY *BdsBootOptionList
162 );
163
164 //
165 // Bds misc lib functions
166 //
167 UINT16
168 BdsLibGetTimeout (
169 VOID
170 );
171
172 EFI_STATUS
173 BdsLibGetBootMode (
174 OUT EFI_BOOT_MODE *BootMode
175 );
176
177 VOID
178 BdsLibLoadDrivers (
179 IN LIST_ENTRY *BdsDriverLists
180 );
181
182 EFI_STATUS
183 BdsLibBuildOptionFromVar (
184 IN LIST_ENTRY *BdsCommonOptionList,
185 IN CHAR16 *VariableName
186 );
187
188 VOID *
189 BdsLibGetVariableAndSize (
190 IN CHAR16 *Name,
191 IN EFI_GUID *VendorGuid,
192 OUT UINTN *VariableSize
193 );
194
195 EFI_STATUS
196 BdsLibOutputStrings (
197 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut,
198 ...
199 );
200
201 BDS_COMMON_OPTION *
202 BdsLibVariableToOption (
203 IN OUT LIST_ENTRY *BdsCommonOptionList,
204 IN CHAR16 *VariableName
205 );
206
207 EFI_STATUS
208 BdsLibRegisterNewOption (
209 IN LIST_ENTRY *BdsOptionList,
210 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
211 IN CHAR16 *String,
212 IN CHAR16 *VariableName
213 );
214
215 //
216 // Bds connect or disconnect driver lib funcion
217 //
218 VOID
219 BdsLibConnectAllDriversToAllControllers (
220 VOID
221 );
222
223 VOID
224 BdsLibConnectAll (
225 VOID
226 );
227
228 EFI_STATUS
229 BdsLibConnectDevicePath (
230 IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect
231 );
232
233 EFI_STATUS
234 BdsLibConnectAllEfi (
235 VOID
236 );
237
238 EFI_STATUS
239 BdsLibDisconnectAllEfi (
240 VOID
241 );
242
243 //
244 // Bds console relate lib functions
245 //
246 VOID
247 BdsLibConnectAllConsoles (
248 VOID
249 );
250
251 EFI_STATUS
252 BdsLibConnectAllDefaultConsoles (
253 VOID
254 );
255
256 EFI_STATUS
257 BdsLibUpdateConsoleVariable (
258 IN CHAR16 *ConVarName,
259 IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath,
260 IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath
261 );
262
263 EFI_STATUS
264 BdsLibConnectConsoleVariable (
265 IN CHAR16 *ConVarName
266 );
267
268 //
269 // Bds device path relate lib functions
270 //
271 EFI_DEVICE_PATH_PROTOCOL *
272 BdsLibUnpackDevicePath (
273 IN EFI_DEVICE_PATH_PROTOCOL *DevPath
274 );
275
276 EFI_DEVICE_PATH_PROTOCOL *
277 BdsLibDelPartMatchInstance (
278 IN EFI_DEVICE_PATH_PROTOCOL *Multi,
279 IN EFI_DEVICE_PATH_PROTOCOL *Single
280 );
281
282 BOOLEAN
283 BdsLibMatchDevicePaths (
284 IN EFI_DEVICE_PATH_PROTOCOL *Multi,
285 IN EFI_DEVICE_PATH_PROTOCOL *Single
286 );
287
288 CHAR16 *
289 DevicePathToStr (
290 EFI_DEVICE_PATH_PROTOCOL *DevPath
291 );
292
293 VOID *
294 EfiLibGetVariable (
295 IN CHAR16 *Name,
296 IN EFI_GUID *VendorGuid
297 );
298
299 //
300 // Internal definitions
301 //
302 typedef struct {
303 CHAR16 *str;
304 UINTN len;
305 UINTN maxlen;
306 } POOL_PRINT;
307
308 typedef struct {
309 UINT8 Type;
310 UINT8 SubType;
311 VOID (*Function) (POOL_PRINT *, VOID *);
312 } DEVICE_PATH_STRING_TABLE;
313
314 extern EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid;
315
316 typedef struct {
317 EFI_DEVICE_PATH_PROTOCOL Header;
318 EFI_GUID Guid;
319 UINT8 VendorDefinedData[1];
320 } VENDOR_DEVICE_PATH_WITH_DATA;
321
322 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
323
324 extern EFI_GUID mEfiDevicePathMessagingSASGuid;
325
326 typedef struct {
327 EFI_DEVICE_PATH_PROTOCOL Header;
328 UINT16 NetworkProtocol;
329 UINT16 LoginOption;
330 UINT64 Lun;
331 UINT16 TargetPortalGroupTag;
332 CHAR16 iSCSITargetName[1];
333 } ISCSI_DEVICE_PATH_WITH_NAME;
334
335 #endif
336
337 //
338 // Internal functions
339 //
340 EFI_STATUS
341 BdsBootByDiskSignatureAndPartition (
342 IN BDS_COMMON_OPTION * Option,
343 IN HARDDRIVE_DEVICE_PATH * HardDriveDevicePath,
344 IN UINT32 LoadOptionsSize,
345 IN VOID *LoadOptions,
346 OUT UINTN *ExitDataSize,
347 OUT CHAR16 **ExitData OPTIONAL
348 );
349
350 //
351 // Notes: EFI 64 shadow all option rom
352 //
353 #if defined (MDE_CPU_IPF)
354 #define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();
355 VOID
356 ShadowAllOptionRom();
357 #else
358 #define EFI64_SHADOW_ALL_LEGACY_ROM()
359 #endif
360
361 //
362 // BBS support macros and functions
363 //
364
365 #if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64)
366 #define REFRESH_LEGACY_BOOT_OPTIONS \
367 BdsDeleteAllInvalidLegacyBootOptions ();\
368 BdsAddNonExistingLegacyBootOptions (); \
369 BdsUpdateLegacyDevOrder ()
370 #else
371 #define REFRESH_LEGACY_BOOT_OPTIONS
372 #endif
373
374 EFI_STATUS
375 BdsDeleteAllInvalidLegacyBootOptions (
376 VOID
377 );
378
379 EFI_STATUS
380 BdsAddNonExistingLegacyBootOptions (
381 VOID
382 );
383
384 EFI_STATUS
385 BdsUpdateLegacyDevOrder (
386 VOID
387 );
388
389 EFI_STATUS
390 BdsRefreshBbsTableForBoot (
391 IN BDS_COMMON_OPTION *Entry
392 );
393
394 EFI_STATUS
395 BdsDeleteBootOption (
396 IN UINTN OptionNumber,
397 IN OUT UINT16 *BootOrder,
398 IN OUT UINTN *BootOrderSize
399 );
400
401 //
402 //The interface functions relate with Setup Browser Reset Reminder feature
403 //
404 VOID
405 EnableResetReminderFeature (
406 VOID
407 );
408
409 VOID
410 DisableResetReminderFeature (
411 VOID
412 );
413
414 VOID
415 EnableResetRequired (
416 VOID
417 );
418
419 VOID
420 DisableResetRequired (
421 VOID
422 );
423
424 BOOLEAN
425 IsResetReminderFeatureEnable (
426 VOID
427 );
428
429 BOOLEAN
430 IsResetRequired (
431 VOID
432 );
433
434 VOID
435 SetupResetReminder (
436 VOID
437 );
438
439 EFI_STATUS
440 BdsLibGetImageHeader (
441 IN EFI_HANDLE Device,
442 IN CHAR16 *FileName,
443 OUT EFI_IMAGE_DOS_HEADER *DosHeader,
444 OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
445 )
446 ;
447
448 EFI_STATUS
449 BdsLibGetHiiHandles (
450 #if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
451 IN EFI_HII_DATABASE_PROTOCOL *HiiDatabase,
452 #else
453 IN EFI_HII_PROTOCOL *Hii,
454 #endif
455 IN OUT UINT16 *HandleBufferLength,
456 OUT EFI_HII_HANDLE **HiiHandleBuffer
457 );
458
459 //
460 // Define the boot type which to classify the boot option type
461 // Different boot option type could have different boot behavior
462 // Use their device path node (Type + SubType) as type value
463 // The boot type here can be added according to requirement
464 //
465 //
466 // ACPI boot type. For ACPI device, cannot use sub-type to distinguish device, so hardcode their value
467 //
468 #define BDS_EFI_ACPI_FLOPPY_BOOT 0x0201
469 //
470 // Message boot type
471 // If a device path of boot option only point to a message node, the boot option is message boot type
472 //
473 #define BDS_EFI_MESSAGE_ATAPI_BOOT 0x0301 // Type 03; Sub-Type 01
474 #define BDS_EFI_MESSAGE_SCSI_BOOT 0x0302 // Type 03; Sub-Type 02
475 #define BDS_EFI_MESSAGE_USB_DEVICE_BOOT 0x0305 // Type 03; Sub-Type 05
476 #define BDS_EFI_MESSAGE_MISC_BOOT 0x03FF
477 //
478 // Media boot type
479 // If a device path of boot option contain a media node, the boot option is media boot type
480 //
481 #define BDS_EFI_MEDIA_HD_BOOT 0x0401 // Type 04; Sub-Type 01
482 #define BDS_EFI_MEDIA_CDROM_BOOT 0x0402 // Type 04; Sub-Type 02
483 //
484 // BBS boot type
485 // If a device path of boot option contain a BBS node, the boot option is BBS boot type
486 //
487 #define BDS_LEGACY_BBS_BOOT 0x0501 // Type 05; Sub-Type 01
488
489 #define BDS_EFI_UNSUPPORT 0xFFFF
490
491 //
492 // USB host controller Programming Interface.
493 //
494 #define PCI_CLASSC_PI_UHCI 0x00
495 #define PCI_CLASSC_PI_EHCI 0x20
496
497 BOOLEAN
498 MatchPartitionDevicePathNode (
499 IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,
500 IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
501 );
502
503 EFI_DEVICE_PATH_PROTOCOL *
504 BdsExpandPartitionPartialDevicePathToFull (
505 IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
506 );
507
508 EFI_HANDLE
509 BdsLibGetBootableHandle (
510 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
511 );
512
513 BOOLEAN
514 BdsLibIsValidEFIBootOptDevicePath (
515 IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
516 IN BOOLEAN CheckMedia
517 );
518
519 UINT32
520 BdsGetBootTypeFromDevicePath (
521 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
522 );
523
524 VOID
525 EFIAPI
526 BdsLibSaveMemoryTypeInformation (
527 VOID
528 );
529
530 EFI_STATUS
531 EFIAPI
532 BdsLibUpdateFvFileDevicePath (
533 IN OUT EFI_DEVICE_PATH_PROTOCOL ** DevicePath,
534 IN EFI_GUID *FileGuid
535 );
536
537 EFI_STATUS
538 BdsLibConnectUsbDevByShortFormDP (
539 IN CHAR8 HostControllerPI,
540 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
541 );
542
543 EFI_TPL
544 BdsLibGetCurrentTpl (
545 VOID
546 );
547
548 //
549 // The implementation of this function is provided by Platform code.
550 //
551 VOID
552 DevPathVendor (
553 IN OUT POOL_PRINT *Str,
554 IN VOID *DevPath
555 )
556 ;
557
558 CHAR16 *
559 CatPrint (
560 IN OUT POOL_PRINT *Str,
561 IN CHAR16 *fmt,
562 ...
563 )
564 ;
565 #endif // _BDS_LIB_H_