1 /*! \addtogroup Library EdkGenericBdsLib */
4 BDS library definition, include the file and data structure
6 Copyright (c) 2006 - 2007, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 #include <Protocol/SimpleTextOut.h>
21 #include <Protocol/FrameworkHii.h>
23 extern EFI_HANDLE mBdsImageHandle
;
26 // Constants which are variable names used to access variables
28 #define VarLegacyDevOrder L"LegacyDevOrder"
31 // Data structures and defines
33 #define FRONT_PAGE_QUESTION_ID 0x0000
34 #define FRONT_PAGE_DATA_WIDTH 0x01
39 #define CONSOLE_OUT 0x00000001
40 #define STD_ERROR 0x00000002
41 #define CONSOLE_IN 0x00000004
42 #define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
45 // Load Option Attributes defined in EFI Specification
47 #define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0)
50 // Define Maxmim characters that will be accepted
53 #define MAX_CHAR_SIZE (MAX_CHAR * 2)
55 #define MIN_ALIGNMENT_SIZE 4
56 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
59 // Define maximum characters for boot option variable "BootXXXX"
61 #define BOOT_OPTION_MAX_CHAR 10
64 // This data structure is the part of BDS_CONNECT_ENTRY that we can hard code.
66 #define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O')
73 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
81 UINT32 LoadOptionsSize
;
86 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
88 } BDS_CONSOLE_CONNECT_ENTRY
;
95 // Bds boot relate lib functions
98 BdsLibUpdateBootOrderList (
99 IN LIST_ENTRY
*BdsOptionList
,
100 IN CHAR16
*VariableName
109 \fn BdsLibBootViaBootOption
110 \param BDS_COMMON_OPTION
111 \param EFI_DEVICE_PATH_PROTOCOL
114 BdsLibBootViaBootOption (
115 IN BDS_COMMON_OPTION
* Option
,
116 IN EFI_DEVICE_PATH_PROTOCOL
* DevicePath
,
117 OUT UINTN
*ExitDataSize
,
118 OUT CHAR16
**ExitData OPTIONAL
122 BdsLibEnumerateAllBootOption (
123 IN OUT LIST_ENTRY
*BdsBootOptionList
127 BdsLibBuildOptionFromHandle (
128 IN EFI_HANDLE Handle
,
129 IN LIST_ENTRY
*BdsBootOptionList
133 BdsLibBuildOptionFromShell (
134 IN EFI_HANDLE Handle
,
135 IN LIST_ENTRY
*BdsBootOptionList
139 // Bds misc lib functions
148 IN LIST_ENTRY
*BdsDriverLists
152 BdsLibBuildOptionFromVar (
153 IN LIST_ENTRY
*BdsCommonOptionList
,
154 IN CHAR16
*VariableName
158 BdsLibGetVariableAndSize (
160 IN EFI_GUID
*VendorGuid
,
161 OUT UINTN
*VariableSize
165 BdsLibOutputStrings (
166 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*ConOut
,
171 BdsLibVariableToOption (
172 IN OUT LIST_ENTRY
*BdsCommonOptionList
,
173 IN CHAR16
*VariableName
177 BdsLibRegisterNewOption (
178 IN LIST_ENTRY
*BdsOptionList
,
179 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
181 IN CHAR16
*VariableName
185 // Bds connect or disconnect driver lib funcion
188 BdsLibConnectAllDriversToAllControllers (
198 BdsLibConnectDevicePath (
199 IN EFI_DEVICE_PATH_PROTOCOL
*DevicePathToConnect
203 BdsLibConnectAllEfi (
208 BdsLibDisconnectAllEfi (
213 // Bds console relate lib functions
216 BdsLibConnectAllConsoles (
221 BdsLibConnectAllDefaultConsoles (
226 BdsLibUpdateConsoleVariable (
227 IN CHAR16
*ConVarName
,
228 IN EFI_DEVICE_PATH_PROTOCOL
*CustomizedConDevicePath
,
229 IN EFI_DEVICE_PATH_PROTOCOL
*ExclusiveDevicePath
233 BdsLibConnectConsoleVariable (
234 IN CHAR16
*ConVarName
238 // Bds device path relate lib functions
240 EFI_DEVICE_PATH_PROTOCOL
*
241 BdsLibUnpackDevicePath (
242 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath
250 EFI_DEVICE_PATH_PROTOCOL
*
251 BdsLibDelPartMatchInstance (
252 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
253 IN EFI_DEVICE_PATH_PROTOCOL
*Single
257 BdsLibMatchDevicePaths (
258 IN EFI_DEVICE_PATH_PROTOCOL
*Multi
,
259 IN EFI_DEVICE_PATH_PROTOCOL
*Single
264 EFI_DEVICE_PATH_PROTOCOL
*DevPath
270 IN EFI_GUID
*VendorGuid
274 // Internal definitions
285 VOID (*Function
) (POOL_PRINT
*, VOID
*);
286 } DEVICE_PATH_STRING_TABLE
;
289 // Internal functions
292 BdsBootByDiskSignatureAndPartition (
293 IN BDS_COMMON_OPTION
* Option
,
294 IN HARDDRIVE_DEVICE_PATH
* HardDriveDevicePath
,
295 IN UINT32 LoadOptionsSize
,
296 IN VOID
*LoadOptions
,
297 OUT UINTN
*ExitDataSize
,
298 OUT CHAR16
**ExitData OPTIONAL
302 // Notes: EFI 64 shadow all option rom
304 #if defined (MDE_CPU_IPF)
305 #define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();
307 ShadowAllOptionRom();
309 #define EFI64_SHADOW_ALL_LEGACY_ROM()
313 // BBS support macros and functions
315 #if defined (MDE_CPU_IA32)
316 #define REFRESH_LEGACY_BOOT_OPTIONS \
317 BdsDeleteAllInvalidLegacyBootOptions ();\
318 BdsAddNonExistingLegacyBootOptions (); \
319 BdsUpdateLegacyDevOrder ()
321 #define REFRESH_LEGACY_BOOT_OPTIONS
325 BdsDeleteAllInvalidLegacyBootOptions (
330 BdsAddNonExistingLegacyBootOptions (
335 BdsUpdateLegacyDevOrder (
340 BdsRefreshBbsTableForBoot (
341 IN BDS_COMMON_OPTION
*Entry
345 BdsDeleteBootOption (
346 IN UINTN OptionNumber
,
347 IN OUT UINT16
*BootOrder
,
348 IN OUT UINTN
*BootOrderSize
352 //The interface functions relate with Setup Browser Reset Reminder feature
355 EnableResetReminderFeature (
360 DisableResetReminderFeature (
365 EnableResetRequired (
370 DisableResetRequired (
375 IsResetReminderFeatureEnable (
390 BdsLibGetHiiHandles (
391 IN EFI_HII_PROTOCOL
*Hii
,
392 IN OUT UINT16
*HandleBufferLength
,
393 OUT FRAMEWORK_EFI_HII_HANDLE
**HiiHandles
396 #endif // _BDS_LIB_H_