1 /** @file
2 *
3 *  Copyright (c) 2013-2015, ARM Limited. All rights reserved.
4 *
5 *  This program and the accompanying materials
6 *  are licensed and made available under the terms and conditions of the BSD License
7 *  which accompanies this distribution.  The full text of the license may be found at
8 *  http://opensource.org/licenses/bsd-license.php
9 *
10 *  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 *  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 *
13 **/
14 
15 #ifndef __BDS_ENTRY_H__
16 #define __BDS_ENTRY_H__
17 
18 /**
19   This is defined by the UEFI specs, don't change it
20 **/
21 typedef struct {
22   UINT16                      LoadOptionIndex;
23   EFI_LOAD_OPTION             *LoadOption;
24   UINTN                       LoadOptionSize;
25 
26   UINT32                      Attributes;
27   UINT16                      FilePathListLength;
28   CHAR16                      *Description;
29   EFI_DEVICE_PATH_PROTOCOL    *FilePathList;
30 
31   VOID*                       OptionalData;
32   UINTN                       OptionalDataSize;
33 } BDS_LOAD_OPTION;
34 
35 /**
36   Connect a Device Path and return the handle of the driver that support this DevicePath
37 
38   @param  DevicePath            Device Path of the File to connect
39   @param  Handle                Handle of the driver that support this DevicePath
40   @param  RemainingDevicePath   Remaining DevicePath nodes that do not match the driver DevicePath
41 
42   @retval EFI_SUCCESS           A driver that matches the Device Path has been found
43   @retval EFI_NOT_FOUND         No handles match the search.
44   @retval EFI_INVALID_PARAMETER DevicePath or Handle is NULL
45 
46 **/
47 EFI_STATUS
48 BdsConnectDevicePath (
49   IN  EFI_DEVICE_PATH_PROTOCOL* DevicePath,
50   OUT EFI_HANDLE                *Handle,
51   OUT EFI_DEVICE_PATH_PROTOCOL  **RemainingDevicePath
52   );
53 
54 /**
55   Connect all DXE drivers
56 
57   @retval EFI_SUCCESS           All drivers have been connected
58   @retval EFI_NOT_FOUND         No handles match the search.
59   @retval EFI_OUT_OF_RESOURCES  There is not resource pool memory to store the matching results.
60 
61 **/
62 EFI_STATUS
63 BdsConnectAllDrivers (
64   VOID
65   );
66 
67 /**
68   Return the value of a global variable defined by its VariableName.
69   The variable must be defined with the VendorGuid gEfiGlobalVariableGuid.
70 
71   @param  VariableName          A Null-terminated string that is the name of the vendor's
72                                 variable.
73   @param  DefaultValue          Value returned by the function if the variable does not exist
74   @param  DataSize              On input, the size in bytes of the return Data buffer.
75                                 On output the size of data returned in Data.
76   @param  Value                 Value read from the UEFI Variable or copy of the default value
77                                 if the UEFI Variable does not exist
78 
79   @retval EFI_SUCCESS           All drivers have been connected
80   @retval EFI_NOT_FOUND         No handles match the search.
81   @retval EFI_OUT_OF_RESOURCES  There is not resource pool memory to store the matching results.
82 
83 **/
84 EFI_STATUS
85 GetGlobalEnvironmentVariable (
86   IN     CONST CHAR16*   VariableName,
87   IN     VOID*           DefaultValue,
88   IN OUT UINTN*          Size,
89   OUT    VOID**          Value
90   );
91 
92 /**
93   Return the value of the variable defined by its VariableName and VendorGuid
94 
95   @param  VariableName          A Null-terminated string that is the name of the vendor's
96                                 variable.
97   @param  VendorGuid            A unique identifier for the vendor.
98   @param  DefaultValue          Value returned by the function if the variable does not exist
99   @param  DataSize              On input, the size in bytes of the return Data buffer.
100                                 On output the size of data returned in Data.
101   @param  Value                 Value read from the UEFI Variable or copy of the default value
102                                 if the UEFI Variable does not exist
103 
104   @retval EFI_SUCCESS           All drivers have been connected
105   @retval EFI_NOT_FOUND         No handles match the search.
106   @retval EFI_OUT_OF_RESOURCES  There is not resource pool memory to store the matching results.
107 
108 **/
109 EFI_STATUS
110 GetEnvironmentVariable (
111   IN     CONST CHAR16*   VariableName,
112   IN     EFI_GUID*       VendorGuid,
113   IN     VOID*           DefaultValue,
114   IN OUT UINTN*          Size,
115   OUT    VOID**          Value
116   );
117 
118 EFI_STATUS
119 BootOptionFromLoadOptionIndex (
120   IN  UINT16            LoadOptionIndex,
121   OUT BDS_LOAD_OPTION** BdsLoadOption
122   );
123 
124 EFI_STATUS
125 BootOptionFromLoadOptionVariable (
126   IN  CHAR16*           BootVariableName,
127   OUT BDS_LOAD_OPTION** BdsLoadOption
128   );
129 
130 EFI_STATUS
131 BootOptionToLoadOptionVariable (
132   IN BDS_LOAD_OPTION*   BdsLoadOption
133   );
134 
135 UINT16
136 BootOptionAllocateBootIndex (
137   VOID
138   );
139 
140 /**
141   Start an EFI Application from a Device Path
142 
143   @param  ParentImageHandle     Handle of the calling image
144   @param  DevicePath            Location of the EFI Application
145 
146   @retval EFI_SUCCESS           All drivers have been connected
147   @retval EFI_NOT_FOUND         The Linux kernel Device Path has not been found
148   @retval EFI_OUT_OF_RESOURCES  There is not enough resource memory to store the matching results.
149 
150 **/
151 EFI_STATUS
152 BdsStartEfiApplication (
153   IN EFI_HANDLE                  ParentImageHandle,
154   IN EFI_DEVICE_PATH_PROTOCOL    *DevicePath,
155   IN UINTN                       LoadOptionsSize,
156   IN VOID*                       LoadOptions
157   );
158 
159 EFI_STATUS
160 BdsLoadImage (
161   IN     EFI_DEVICE_PATH       *DevicePath,
162   IN     EFI_ALLOCATE_TYPE     Type,
163   IN OUT EFI_PHYSICAL_ADDRESS* Image,
164   OUT    UINTN                 *FileSize
165   );
166 
167 /**
168  * Call BS.ExitBootServices with the appropriate Memory Map information
169  */
170 EFI_STATUS
171 ShutdownUefiBootServices (
172   VOID
173   );
174 
175 /**
176   Locate an EFI application in a the Firmware Volumes by its name
177 
178   @param  EfiAppGuid            Guid of the EFI Application into the Firmware Volume
179   @param  DevicePath            EFI Device Path of the EFI application
180 
181   @return EFI_SUCCESS           The function completed successfully.
182   @return EFI_NOT_FOUND         The protocol could not be located.
183   @return EFI_OUT_OF_RESOURCES  There are not enough resources to find the protocol.
184 
185 **/
186 EFI_STATUS
187 LocateEfiApplicationInFvByName (
188   IN  CONST CHAR16*             EfiAppName,
189   OUT EFI_DEVICE_PATH           **DevicePath
190   );
191 
192 /**
193   Locate an EFI application in a the Firmware Volumes by its GUID
194 
195   @param  EfiAppGuid            Guid of the EFI Application into the Firmware Volume
196   @param  DevicePath            EFI Device Path of the EFI application
197 
198   @return EFI_SUCCESS           The function completed successfully.
199   @return EFI_NOT_FOUND         The protocol could not be located.
200   @return EFI_OUT_OF_RESOURCES  There are not enough resources to find the protocol.
201 
202 **/
203 EFI_STATUS
204 LocateEfiApplicationInFvByGuid (
205   IN  CONST EFI_GUID            *EfiAppGuid,
206   OUT EFI_DEVICE_PATH           **DevicePath
207   );
208 
209 #endif
210