/** @file * * Copyright (c) 2011, ARM Limited. All rights reserved. * * This program and the accompanying materials * are licensed and made available under the terms and conditions of the BSD License * which accompanies this distribution. The full text of the license may be found at * http://opensource.org/licenses/bsd-license.php * * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. * **/ #ifndef __BDS_ENTRY_H__ #define __BDS_ENTRY_H__ typedef UINT8* EFI_LOAD_OPTION; /** This is defined by the UEFI specs, don't change it **/ typedef struct { UINT16 LoadOptionIndex; EFI_LOAD_OPTION LoadOption; UINTN LoadOptionSize; UINT32 Attributes; UINT16 FilePathListLength; CHAR16 *Description; EFI_DEVICE_PATH_PROTOCOL *FilePathList; VOID* OptionalData; UINTN OptionalDataSize; } BDS_LOAD_OPTION; /** Connect a Device Path and return the handle of the driver that support this DevicePath @param DevicePath Device Path of the File to connect @param Handle Handle of the driver that support this DevicePath @param RemainingDevicePath Remaining DevicePath nodes that do not match the driver DevicePath @retval EFI_SUCCESS A driver that matches the Device Path has been found @retval EFI_NOT_FOUND No handles match the search. @retval EFI_INVALID_PARAMETER DevicePath or Handle is NULL **/ EFI_STATUS BdsConnectDevicePath ( IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, OUT EFI_HANDLE *Handle, OUT EFI_DEVICE_PATH_PROTOCOL **RemainingDevicePath ); /** Connect all DXE drivers @retval EFI_SUCCESS All drivers have been connected @retval EFI_NOT_FOUND No handles match the search. @retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results. **/ EFI_STATUS BdsConnectAllDrivers ( VOID ); EFI_STATUS GetEnvironmentVariable ( IN CONST CHAR16* VariableName, IN VOID* DefaultValue, IN OUT UINTN* Size, OUT VOID** Value ); EFI_STATUS BootOptionFromLoadOptionIndex ( IN UINT16 LoadOptionIndex, OUT BDS_LOAD_OPTION** BdsLoadOption ); EFI_STATUS BootOptionFromLoadOptionVariable ( IN CHAR16* BootVariableName, OUT BDS_LOAD_OPTION** BdsLoadOption ); EFI_STATUS BootOptionToLoadOptionVariable ( IN BDS_LOAD_OPTION* BdsLoadOption ); UINT16 BootOptionAllocateBootIndex ( VOID ); /** Start a Linux kernel from a Device Path @param LinuxKernel Device Path to the Linux Kernel @param Parameters Linux kernel arguments @param Fdt Device Path to the Flat Device Tree @retval EFI_SUCCESS All drivers have been connected @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results. **/ EFI_STATUS BdsBootLinux ( IN EFI_DEVICE_PATH_PROTOCOL* LinuxKernelDevicePath, IN EFI_DEVICE_PATH_PROTOCOL* InitrdDevicePath, IN CONST CHAR8* Arguments, IN EFI_DEVICE_PATH_PROTOCOL* FdtDevicePath ); /** Start an EFI Application from a Device Path @param ParentImageHandle Handle of the calling image @param DevicePath Location of the EFI Application @retval EFI_SUCCESS All drivers have been connected @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results. **/ EFI_STATUS BdsStartEfiApplication ( IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN UINTN LoadOptionsSize, IN VOID* LoadOptions ); /** Start an EFI Application from any Firmware Volume @param EfiApp EFI Application Name @retval EFI_SUCCESS All drivers have been connected @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results. **/ EFI_STATUS BdsLoadApplication ( IN EFI_HANDLE ParentImageHandle, IN CHAR16* EfiApp, IN UINTN LoadOptionsSize, IN VOID* LoadOptions ); EFI_STATUS BdsLoadImage ( IN EFI_DEVICE_PATH *DevicePath, IN EFI_ALLOCATE_TYPE Type, IN OUT EFI_PHYSICAL_ADDRESS* Image, OUT UINTN *FileSize ); #endif