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_
26 #include <Protocol/HiiDatabase.h>
27 #include <IndustryStandard/PeImage.h>
30 extern EFI_HANDLE mBdsImageHandle
;
33 // Constants which are variable names used to access variables
35 #define VarLegacyDevOrder L"LegacyDevOrder"
38 // Data structures and defines
40 #define FRONT_PAGE_QUESTION_ID 0x0000
41 #define FRONT_PAGE_DATA_WIDTH 0x01
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)
52 // Load Option Attributes defined in EFI Specification
54 #define LOAD_OPTION_ACTIVE 0x00000001
55 #define LOAD_OPTION_FORCE_RECONNECT 0x00000002
57 #define LOAD_OPTION_HIDDEN 0x00000008
58 #define LOAD_OPTION_CATEGORY 0x00001F00
60 #define LOAD_OPTION_CATEGORY_BOOT 0x00000000
61 #define LOAD_OPTION_CATEGORY_APP 0x00000100
63 #define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001
64 #define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002
66 #define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0)
69 // Define Maxmim characters that will be accepted
72 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
74 #define MIN_ALIGNMENT_SIZE 4
75 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
78 // Define maximum characters for boot option variable "BootXXXX"
80 #define BOOT_OPTION_MAX_CHAR 10
83 // This data structure is the part of BDS_CONNECT_ENTRY that we can hard code.
85 #define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O')
92 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
100 UINT32 LoadOptionsSize
;
101 CHAR16
*StatusString
;
106 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
108 } BDS_CONSOLE_CONNECT_ENTRY
;
115 // Bds boot relate lib functions
118 BdsLibUpdateBootOrderList (
119 IN LIST_ENTRY
*BdsOptionList
,
120 IN CHAR16
*VariableName
129 BdsLibBootViaBootOption (
130 IN BDS_COMMON_OPTION
* Option
,
131 IN EFI_DEVICE_PATH_PROTOCOL
* DevicePath
,
132 OUT UINTN
*ExitDataSize
,
133 OUT CHAR16
**ExitData OPTIONAL
137 BdsLibEnumerateAllBootOption (
138 IN OUT LIST_ENTRY
*BdsBootOptionList
142 BdsLibBuildOptionFromHandle (
143 IN EFI_HANDLE Handle
,
144 IN LIST_ENTRY
*BdsBootOptionList
,
149 BdsLibBuildOptionFromShell (
150 IN EFI_HANDLE Handle
,
151 IN LIST_ENTRY
*BdsBootOptionList
155 // Bds misc lib functions
164 OUT EFI_BOOT_MODE
*BootMode
169 IN LIST_ENTRY
*BdsDriverLists
173 BdsLibBuildOptionFromVar (
174 IN LIST_ENTRY
*BdsCommonOptionList
,
175 IN CHAR16
*VariableName
179 BdsLibGetVariableAndSize (
181 IN EFI_GUID
*VendorGuid
,
182 OUT UINTN
*VariableSize
186 BdsLibOutputStrings (
187 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*ConOut
,
192 BdsLibVariableToOption (
193 IN OUT LIST_ENTRY
*BdsCommonOptionList
,
194 IN CHAR16
*VariableName
198 BdsLibRegisterNewOption (
199 IN LIST_ENTRY
*BdsOptionList
,
200 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
202 IN CHAR16
*VariableName
206 // Bds connect or disconnect driver lib funcion
209 BdsLibConnectAllDriversToAllControllers (
219 BdsLibConnectDevicePath (
220 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePathToConnect
224 BdsLibConnectAllEfi (
229 BdsLibDisconnectAllEfi (
234 // Bds console relate lib functions
237 BdsLibConnectAllConsoles (
242 BdsLibConnectAllDefaultConsoles (
247 BdsLibUpdateConsoleVariable (
248 IN CHAR16
*ConVarName
,
249 IN EFI_DEVICE_PATH_PROTOCOL
*CustomizedConDevicePath
,
250 IN EFI_DEVICE_PATH_PROTOCOL
*ExclusiveDevicePath
254 BdsLibConnectConsoleVariable (
255 IN CHAR16
*ConVarName
259 // Bds device path relate lib functions
261 EFI_DEVICE_PATH_PROTOCOL
*
262 BdsLibUnpackDevicePath (
263 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
266 EFI_DEVICE_PATH_PROTOCOL
*
267 BdsLibDelPartMatchInstance (
268 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
269 IN EFI_DEVICE_PATH_PROTOCOL
*Single
273 BdsLibMatchDevicePaths (
274 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
275 IN EFI_DEVICE_PATH_PROTOCOL
*Single
280 EFI_DEVICE_PATH_PROTOCOL
*DevPath
286 IN EFI_GUID
*VendorGuid
290 // Internal definitions
301 VOID (*Function
) (POOL_PRINT
*, VOID
*);
302 } DEVICE_PATH_STRING_TABLE
;
304 extern EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid
;
307 EFI_DEVICE_PATH_PROTOCOL Header
;
309 UINT8 VendorDefinedData
[1];
310 } VENDOR_DEVICE_PATH_WITH_DATA
;
313 extern EFI_GUID mEfiDevicePathMessagingSASGuid
;
316 EFI_DEVICE_PATH_PROTOCOL Header
;
317 UINT16 NetworkProtocol
;
320 UINT16 TargetPortalGroupTag
;
321 CHAR16 iSCSITargetName
[1];
322 } ISCSI_DEVICE_PATH_WITH_NAME
;
326 // Internal functions
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
339 // Notes: EFI 64 shadow all option rom
341 #if defined (MDE_CPU_IPF)
342 #define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();
344 ShadowAllOptionRom();
346 #define EFI64_SHADOW_ALL_LEGACY_ROM()
350 // BBS support macros and functions
353 #if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64)
354 #define REFRESH_LEGACY_BOOT_OPTIONS \
355 BdsDeleteAllInvalidLegacyBootOptions ();\
356 BdsAddNonExistingLegacyBootOptions (); \
357 BdsUpdateLegacyDevOrder ()
359 #define REFRESH_LEGACY_BOOT_OPTIONS
363 BdsDeleteAllInvalidLegacyBootOptions (
368 BdsAddNonExistingLegacyBootOptions (
373 BdsUpdateLegacyDevOrder (
378 BdsRefreshBbsTableForBoot (
379 IN BDS_COMMON_OPTION
*Entry
383 BdsDeleteBootOption (
384 IN UINTN OptionNumber
,
385 IN OUT UINT16
*BootOrder
,
386 IN OUT UINTN
*BootOrderSize
390 //The interface functions relate with Setup Browser Reset Reminder feature
393 EnableResetReminderFeature (
398 DisableResetReminderFeature (
403 EnableResetRequired (
408 DisableResetRequired (
413 IsResetReminderFeatureEnable (
428 BdsLibGetImageHeader (
429 IN EFI_HANDLE Device
,
431 OUT EFI_IMAGE_DOS_HEADER
*DosHeader
,
432 OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
437 BdsLibGetHiiHandles (
438 IN EFI_HII_DATABASE_PROTOCOL
*HiiDatabase
,
439 IN OUT UINT16
*HandleBufferLength
,
440 OUT EFI_HII_HANDLE
**HiiHandleBuffer
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
450 // ACPI boot type. For ACPI device, cannot use sub-type to distinguish device, so hardcode their value
452 #define BDS_EFI_ACPI_FLOPPY_BOOT 0x0201
455 // If a device path of boot option only point to a message node, the boot option is message boot type
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
463 // If a device path of boot option contain a media node, the boot option is media boot type
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
469 // If a device path of boot option contain a BBS node, the boot option is BBS boot type
471 #define BDS_LEGACY_BBS_BOOT 0x0501 // Type 05; Sub-Type 01
473 #define BDS_EFI_UNSUPPORT 0xFFFF
476 // USB host controller Programming Interface.
478 #define PCI_CLASSC_PI_UHCI 0x00
479 #define PCI_CLASSC_PI_EHCI 0x20
482 MatchPartitionDevicePathNode (
483 IN EFI_DEVICE_PATH_PROTOCOL
*BlockIoDevicePath
,
484 IN HARDDRIVE_DEVICE_PATH
*HardDriveDevicePath
487 EFI_DEVICE_PATH_PROTOCOL
*
488 BdsExpandPartitionPartialDevicePathToFull (
489 IN HARDDRIVE_DEVICE_PATH
*HardDriveDevicePath
493 BdsLibGetBootableHandle (
494 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
498 BdsLibIsValidEFIBootOptDevicePath (
499 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
,
500 IN BOOLEAN CheckMedia
504 BdsGetBootTypeFromDevicePath (
505 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
510 BdsLibSaveMemoryTypeInformation (
516 BdsLibUpdateFvFileDevicePath (
517 IN OUT EFI_DEVICE_PATH_PROTOCOL
** DevicePath
,
518 IN EFI_GUID
*FileGuid
522 BdsLibConnectUsbDevByShortFormDP (
523 IN UINT8 HostControllerPI
,
524 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
528 BdsLibGetCurrentTpl (
533 // The implementation of this function is provided by Platform code.
537 IN OUT POOL_PRINT
*Str
,
544 IN OUT POOL_PRINT
*Str
,