/** @file * * Copyright (c) 2013-2015, 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__ #define IS_DEVICE_PATH_NODE(node,type,subtype) \ (((node)->Type == (type)) && ((node)->SubType == (subtype))) /** 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 ); /** Return the value of a global variable defined by its VariableName. The variable must be defined with the VendorGuid gEfiGlobalVariableGuid. @param VariableName A Null-terminated string that is the name of the vendor's variable. @param DefaultValue Value returned by the function if the variable does not exist @param DataSize On input, the size in bytes of the return Data buffer. On output the size of data returned in Data. @param Value Value read from the UEFI Variable or copy of the default value if the UEFI Variable does not exist @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 GetGlobalEnvironmentVariable ( IN CONST CHAR16* VariableName, IN VOID* DefaultValue, IN OUT UINTN* Size, OUT VOID** Value ); /** Return the value of the variable defined by its VariableName and VendorGuid @param VariableName A Null-terminated string that is the name of the vendor's variable. @param VendorGuid A unique identifier for the vendor. @param DefaultValue Value returned by the function if the variable does not exist @param DataSize On input, the size in bytes of the return Data buffer. On output the size of data returned in Data. @param Value Value read from the UEFI Variable or copy of the default value if the UEFI Variable does not exist @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 GetEnvironmentVariable ( IN CONST CHAR16* VariableName, IN EFI_GUID* VendorGuid, 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 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 ); EFI_STATUS BdsLoadImage ( IN EFI_DEVICE_PATH *DevicePath, IN EFI_ALLOCATE_TYPE Type, IN OUT EFI_PHYSICAL_ADDRESS* Image, OUT UINTN *FileSize ); /** * Call BS.ExitBootServices with the appropriate Memory Map information */ EFI_STATUS ShutdownUefiBootServices ( VOID ); /** Locate an EFI application in a the Firmware Volumes by its name @param EfiAppGuid Guid of the EFI Application into the Firmware Volume @param DevicePath EFI Device Path of the EFI application @return EFI_SUCCESS The function completed successfully. @return EFI_NOT_FOUND The protocol could not be located. @return EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol. **/ EFI_STATUS LocateEfiApplicationInFvByName ( IN CONST CHAR16* EfiAppName, OUT EFI_DEVICE_PATH **DevicePath ); /** Locate an EFI application in a the Firmware Volumes by its GUID @param EfiAppGuid Guid of the EFI Application into the Firmware Volume @param DevicePath EFI Device Path of the EFI application @return EFI_SUCCESS The function completed successfully. @return EFI_NOT_FOUND The protocol could not be located. @return EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol. **/ EFI_STATUS LocateEfiApplicationInFvByGuid ( IN CONST EFI_GUID *EfiAppGuid, OUT EFI_DEVICE_PATH **DevicePath ); #endif