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