4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Boot Device Selection Architectural Protocol as defined in PI spec Volume 2 DXE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync When the DXE core is done it calls the BDS via this protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __ARCH_PROTOCOL_BDS_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __ARCH_PROTOCOL_BDS_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Global ID for the BDS Architectural Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_BDS_ARCH_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x665E3FF6, 0x46CC, 0x11d4, {0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Declare forward reference for the BDS Architectural Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_BDS_ARCH_PROTOCOL EFI_BDS_ARCH_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function uses policy data from the platform to determine what operating
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync system or system utility should be loaded and invoked. This function call
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync also optionally make the use of user input to determine the operating system
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or system utility to be loaded and invoked. When the DXE Core has dispatched
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync all the drivers on the dispatch queue, this function is called. This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function will attempt to connect the boot devices required to load and invoke
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the selected operating system or system utility. During this process,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync additional firmware volumes may be discovered that may contain addition DXE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers that can be dispatched by the DXE Core. If a boot device cannot be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fully connected, this function calls the DXE Service Dispatch() to allow the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DXE drivers from any newly discovered firmware volumes to be dispatched.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Then the boot device connection can be attempted again. If the same boot
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device connection operation fails twice in a row, then that boot device has
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync failed, and should be skipped. This function should never return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This The EFI_BDS_ARCH_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return None.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_BDS_ENTRY)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_BDS_ARCH_PROTOCOL *This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_BDS_ARCH_PROTOCOL transfers control from DXE to an operating
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// system or a system utility. If there are not enough drivers initialized
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// when this protocol is used to access the required boot device(s), then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// this protocol should add drivers to the dispatch queue and return control
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// back to the dispatcher. Once the required boot devices are available, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// the boot device can be used to load and invoke an OS or a system utility.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_BDS_ARCH_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_BDS_ENTRY Entry;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiBdsArchProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif