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