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
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 Generic BDS library definition, include the file and data structure
22 #ifndef _GENERIC_BDS_LIB_H_
23 #define _GENERIC_BDS_LIB_H_
25 #define PI_SPECIFICATION_VERSION 0x00010000
28 #include <Protocol/HiiDatabase.h>
29 #include <IndustryStandard/PeImage.h>
32 extern EFI_HANDLE mBdsImageHandle
;
35 // Constants which are variable names used to access variables
37 #define VarLegacyDevOrder L"LegacyDevOrder"
40 // Data structures and defines
42 #define FRONT_PAGE_QUESTION_ID 0x0000
43 #define FRONT_PAGE_DATA_WIDTH 0x01
48 #define CONSOLE_OUT 0x00000001
49 #define STD_ERROR 0x00000002
50 #define CONSOLE_IN 0x00000004
51 #define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
54 // Load Option Attributes defined in EFI Specification
56 #define LOAD_OPTION_ACTIVE 0x00000001
57 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
59 #define LOAD_OPTION_HIDDEN 0x00000008
60 #define LOAD_OPTION_CATEGORY 0x00001F00
62 #define LOAD_OPTION_CATEGORY_BOOT 0x00000000
63 #define LOAD_OPTION_CATEGORY_APP 0x00000100
65 #define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001
66 #define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002
68 #define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0)
71 // Define Maxmim characters that will be accepted
74 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
76 #define MIN_ALIGNMENT_SIZE 4
77 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
80 // Define maximum characters for boot option variable "BootXXXX"
82 #define BOOT_OPTION_MAX_CHAR 10
85 // This data structure is the part of BDS_CONNECT_ENTRY that we can hard code.
87 #define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O')
94 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
102 UINT32 LoadOptionsSize
;
103 CHAR16
*StatusString
;
108 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
110 } BDS_CONSOLE_CONNECT_ENTRY
;
117 // Bds boot relate lib functions
120 BdsLibUpdateBootOrderList (
121 IN LIST_ENTRY
*BdsOptionList
,
122 IN CHAR16
*VariableName
131 BdsLibBootViaBootOption (
132 IN BDS_COMMON_OPTION
* Option
,
133 IN EFI_DEVICE_PATH_PROTOCOL
* DevicePath
,
134 OUT UINTN
*ExitDataSize
,
135 OUT CHAR16
**ExitData OPTIONAL
139 BdsLibEnumerateAllBootOption (
140 IN OUT LIST_ENTRY
*BdsBootOptionList
144 BdsLibBuildOptionFromHandle (
145 IN EFI_HANDLE Handle
,
146 IN LIST_ENTRY
*BdsBootOptionList
,
151 BdsLibBuildOptionFromShell (
152 IN EFI_HANDLE Handle
,
153 IN LIST_ENTRY
*BdsBootOptionList
157 // Bds misc lib functions
166 OUT EFI_BOOT_MODE
*BootMode
171 IN LIST_ENTRY
*BdsDriverLists
175 BdsLibBuildOptionFromVar (
176 IN LIST_ENTRY
*BdsCommonOptionList
,
177 IN CHAR16
*VariableName
181 BdsLibGetVariableAndSize (
183 IN EFI_GUID
*VendorGuid
,
184 OUT UINTN
*VariableSize
188 BdsLibOutputStrings (
189 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*ConOut
,
194 BdsLibVariableToOption (
195 IN OUT LIST_ENTRY
*BdsCommonOptionList
,
196 IN CHAR16
*VariableName
200 BdsLibRegisterNewOption (
201 IN LIST_ENTRY
*BdsOptionList
,
202 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
204 IN CHAR16
*VariableName
208 // Bds connect or disconnect driver lib funcion
211 BdsLibConnectAllDriversToAllControllers (
221 BdsLibConnectDevicePath (
222 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePathToConnect
226 BdsLibConnectAllEfi (
231 BdsLibDisconnectAllEfi (
236 // Bds console relate lib functions
239 BdsLibConnectAllConsoles (
244 BdsLibConnectAllDefaultConsoles (
249 BdsLibUpdateConsoleVariable (
250 IN CHAR16
*ConVarName
,
251 IN EFI_DEVICE_PATH_PROTOCOL
*CustomizedConDevicePath
,
252 IN EFI_DEVICE_PATH_PROTOCOL
*ExclusiveDevicePath
256 BdsLibConnectConsoleVariable (
257 IN CHAR16
*ConVarName
261 // Bds device path relate lib functions
263 EFI_DEVICE_PATH_PROTOCOL
*
264 BdsLibUnpackDevicePath (
265 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
268 EFI_DEVICE_PATH_PROTOCOL
*
269 BdsLibDelPartMatchInstance (
270 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
271 IN EFI_DEVICE_PATH_PROTOCOL
*Single
275 BdsLibMatchDevicePaths (
276 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
277 IN EFI_DEVICE_PATH_PROTOCOL
*Single
282 EFI_DEVICE_PATH_PROTOCOL
*DevPath
288 IN EFI_GUID
*VendorGuid
292 // Internal definitions
303 VOID (*Function
) (POOL_PRINT
*, VOID
*);
304 } DEVICE_PATH_STRING_TABLE
;
306 extern EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid
;
309 EFI_DEVICE_PATH_PROTOCOL Header
;
311 UINT8 VendorDefinedData
[1];
312 } VENDOR_DEVICE_PATH_WITH_DATA
;
315 extern EFI_GUID mEfiDevicePathMessagingSASGuid
;
318 EFI_DEVICE_PATH_PROTOCOL Header
;
319 UINT16 NetworkProtocol
;
322 UINT16 TargetPortalGroupTag
;
323 CHAR16 iSCSITargetName
[1];
324 } ISCSI_DEVICE_PATH_WITH_NAME
;
328 // Internal functions
331 BdsBootByDiskSignatureAndPartition (
332 IN BDS_COMMON_OPTION
* Option
,
333 IN HARDDRIVE_DEVICE_PATH
* HardDriveDevicePath
,
334 IN UINT32 LoadOptionsSize
,
335 IN VOID
*LoadOptions
,
336 OUT UINTN
*ExitDataSize
,
337 OUT CHAR16
**ExitData OPTIONAL
341 // Notes: EFI 64 shadow all option rom
343 #if defined (MDE_CPU_IPF)
344 #define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();
346 ShadowAllOptionRom();
348 #define EFI64_SHADOW_ALL_LEGACY_ROM()
352 // BBS support macros and functions
355 #if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64)
356 #define REFRESH_LEGACY_BOOT_OPTIONS \
357 BdsDeleteAllInvalidLegacyBootOptions ();\
358 BdsAddNonExistingLegacyBootOptions (); \
359 BdsUpdateLegacyDevOrder ()
361 #define REFRESH_LEGACY_BOOT_OPTIONS
365 BdsDeleteAllInvalidLegacyBootOptions (
370 BdsAddNonExistingLegacyBootOptions (
375 BdsUpdateLegacyDevOrder (
380 BdsRefreshBbsTableForBoot (
381 IN BDS_COMMON_OPTION
*Entry
385 BdsDeleteBootOption (
386 IN UINTN OptionNumber
,
387 IN OUT UINT16
*BootOrder
,
388 IN OUT UINTN
*BootOrderSize
392 //The interface functions relate with Setup Browser Reset Reminder feature
395 EnableResetReminderFeature (
400 DisableResetReminderFeature (
405 EnableResetRequired (
410 DisableResetRequired (
415 IsResetReminderFeatureEnable (
430 BdsLibGetImageHeader (
431 IN EFI_HANDLE Device
,
433 OUT EFI_IMAGE_DOS_HEADER
*DosHeader
,
434 OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
439 BdsLibGetHiiHandles (
440 IN EFI_HII_DATABASE_PROTOCOL
*HiiDatabase
,
441 IN OUT UINT16
*HandleBufferLength
,
442 OUT EFI_HII_HANDLE
**HiiHandleBuffer
446 // Define the boot type which to classify the boot option type
447 // Different boot option type could have different boot behavior
448 // Use their device path node (Type + SubType) as type value
449 // The boot type here can be added according to requirement
452 // ACPI boot type. For ACPI device, cannot use sub-type to distinguish device, so hardcode their value
454 #define BDS_EFI_ACPI_FLOPPY_BOOT 0x0201
457 // If a device path of boot option only point to a message node, the boot option is message boot type
459 #define BDS_EFI_MESSAGE_ATAPI_BOOT 0x0301 // Type 03; Sub-Type 01
460 #define BDS_EFI_MESSAGE_SCSI_BOOT 0x0302 // Type 03; Sub-Type 02
461 #define BDS_EFI_MESSAGE_USB_DEVICE_BOOT 0x0305 // Type 03; Sub-Type 05
462 #define BDS_EFI_MESSAGE_MISC_BOOT 0x03FF
465 // If a device path of boot option contain a media node, the boot option is media boot type
467 #define BDS_EFI_MEDIA_HD_BOOT 0x0401 // Type 04; Sub-Type 01
468 #define BDS_EFI_MEDIA_CDROM_BOOT 0x0402 // Type 04; Sub-Type 02
471 // If a device path of boot option contain a BBS node, the boot option is BBS boot type
473 #define BDS_LEGACY_BBS_BOOT 0x0501 // Type 05; Sub-Type 01
475 #define BDS_EFI_UNSUPPORT 0xFFFF
478 // USB host controller Programming Interface.
480 #define PCI_CLASSC_PI_UHCI 0x00
481 #define PCI_CLASSC_PI_EHCI 0x20
484 MatchPartitionDevicePathNode (
485 IN EFI_DEVICE_PATH_PROTOCOL
*BlockIoDevicePath
,
486 IN HARDDRIVE_DEVICE_PATH
*HardDriveDevicePath
489 EFI_DEVICE_PATH_PROTOCOL
*
490 BdsExpandPartitionPartialDevicePathToFull (
491 IN HARDDRIVE_DEVICE_PATH
*HardDriveDevicePath
495 BdsLibGetBootableHandle (
496 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
500 BdsLibIsValidEFIBootOptDevicePath (
501 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
,
502 IN BOOLEAN CheckMedia
506 BdsGetBootTypeFromDevicePath (
507 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
512 BdsLibSaveMemoryTypeInformation (
518 BdsLibUpdateFvFileDevicePath (
519 IN OUT EFI_DEVICE_PATH_PROTOCOL
** DevicePath
,
520 IN EFI_GUID
*FileGuid
524 BdsLibConnectUsbDevByShortFormDP (
525 IN UINT8 HostControllerPI
,
526 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
530 BdsLibGetCurrentTpl (
535 // The implementation of this function is provided by Platform code.
539 IN OUT POOL_PRINT
*Str
,
546 IN OUT POOL_PRINT
*Str
,