Subrata Banik | 20fe24b | 2021-12-09 02:46:38 +0530 | [diff] [blame] | 1 | /** @file |
| 2 | Boot Device Selection Architectural Protocol as defined in PI spec Volume 2 DXE |
| 3 | |
| 4 | When the DXE core is done it calls the BDS via this protocol. |
| 5 | |
| 6 | Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> |
| 7 | SPDX-License-Identifier: BSD-2-Clause-Patent |
| 8 | |
| 9 | **/ |
| 10 | |
| 11 | #ifndef __ARCH_PROTOCOL_BDS_H__ |
| 12 | #define __ARCH_PROTOCOL_BDS_H__ |
| 13 | |
| 14 | /// |
| 15 | /// Global ID for the BDS Architectural Protocol |
| 16 | /// |
| 17 | #define EFI_BDS_ARCH_PROTOCOL_GUID \ |
| 18 | { 0x665E3FF6, 0x46CC, 0x11d4, {0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } } |
| 19 | |
| 20 | /// |
| 21 | /// Declare forward reference for the BDS Architectural Protocol |
| 22 | /// |
| 23 | typedef struct _EFI_BDS_ARCH_PROTOCOL EFI_BDS_ARCH_PROTOCOL; |
| 24 | |
| 25 | /** |
| 26 | This function uses policy data from the platform to determine what operating |
| 27 | system or system utility should be loaded and invoked. This function call |
| 28 | also optionally make the use of user input to determine the operating system |
| 29 | or system utility to be loaded and invoked. When the DXE Core has dispatched |
| 30 | all the drivers on the dispatch queue, this function is called. This |
| 31 | function will attempt to connect the boot devices required to load and invoke |
| 32 | the selected operating system or system utility. During this process, |
| 33 | additional firmware volumes may be discovered that may contain addition DXE |
| 34 | drivers that can be dispatched by the DXE Core. If a boot device cannot be |
| 35 | fully connected, this function calls the DXE Service Dispatch() to allow the |
| 36 | DXE drivers from any newly discovered firmware volumes to be dispatched. |
| 37 | Then the boot device connection can be attempted again. If the same boot |
| 38 | device connection operation fails twice in a row, then that boot device has |
| 39 | failed, and should be skipped. This function should never return. |
| 40 | |
| 41 | @param This The EFI_BDS_ARCH_PROTOCOL instance. |
| 42 | |
| 43 | @return None. |
| 44 | |
| 45 | **/ |
| 46 | typedef |
| 47 | VOID |
| 48 | (EFIAPI *EFI_BDS_ENTRY)( |
| 49 | IN EFI_BDS_ARCH_PROTOCOL *This |
| 50 | ); |
| 51 | |
| 52 | /// |
| 53 | /// The EFI_BDS_ARCH_PROTOCOL transfers control from DXE to an operating |
| 54 | /// system or a system utility. If there are not enough drivers initialized |
| 55 | /// when this protocol is used to access the required boot device(s), then |
| 56 | /// this protocol should add drivers to the dispatch queue and return control |
| 57 | /// back to the dispatcher. Once the required boot devices are available, then |
| 58 | /// the boot device can be used to load and invoke an OS or a system utility. |
| 59 | /// |
| 60 | struct _EFI_BDS_ARCH_PROTOCOL { |
| 61 | EFI_BDS_ENTRY Entry; |
| 62 | }; |
| 63 | |
| 64 | extern EFI_GUID gEfiBdsArchProtocolGuid; |
| 65 | |
| 66 | #endif |