]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Include/Library/BdsLib.h
ArmPkg/BdsLib: Exposed ShutdownUefiBootServices() in the BdsLib interface
[mirror_edk2.git] / ArmPkg / Include / Library / BdsLib.h
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 typedef UINT8* EFI_LOAD_OPTION;
19
20 /**
21 This is defined by the UEFI specs, don't change it
22 **/
23 typedef struct {
24 UINT16 LoadOptionIndex;
25 EFI_LOAD_OPTION LoadOption;
26 UINTN LoadOptionSize;
27
28 UINT32 Attributes;
29 UINT16 FilePathListLength;
30 CHAR16 *Description;
31 EFI_DEVICE_PATH_PROTOCOL *FilePathList;
32
33 VOID* OptionalData;
34 UINTN OptionalDataSize;
35 } BDS_LOAD_OPTION;
36
37 /**
38 Connect a Device Path and return the handle of the driver that support this DevicePath
39
40 @param DevicePath Device Path of the File to connect
41 @param Handle Handle of the driver that support this DevicePath
42 @param RemainingDevicePath Remaining DevicePath nodes that do not match the driver DevicePath
43
44 @retval EFI_SUCCESS A driver that matches the Device Path has been found
45 @retval EFI_NOT_FOUND No handles match the search.
46 @retval EFI_INVALID_PARAMETER DevicePath or Handle is NULL
47
48 **/
49 EFI_STATUS
50 BdsConnectDevicePath (
51 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
52 OUT EFI_HANDLE *Handle,
53 OUT EFI_DEVICE_PATH_PROTOCOL **RemainingDevicePath
54 );
55
56 /**
57 Connect all DXE drivers
58
59 @retval EFI_SUCCESS All drivers have been connected
60 @retval EFI_NOT_FOUND No handles match the search.
61 @retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results.
62
63 **/
64 EFI_STATUS
65 BdsConnectAllDrivers (
66 VOID
67 );
68
69 /**
70 Return the value of a global variable defined by its VariableName.
71 The variable must be defined with the VendorGuid gEfiGlobalVariableGuid.
72
73 @param VariableName A Null-terminated string that is the name of the vendor's
74 variable.
75 @param DefaultValue Value returned by the function if the variable does not exist
76 @param DataSize On input, the size in bytes of the return Data buffer.
77 On output the size of data returned in Data.
78 @param Value Value read from the UEFI Variable or copy of the default value
79 if the UEFI Variable does not exist
80
81 @retval EFI_SUCCESS All drivers have been connected
82 @retval EFI_NOT_FOUND No handles match the search.
83 @retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results.
84
85 **/
86 EFI_STATUS
87 GetGlobalEnvironmentVariable (
88 IN CONST CHAR16* VariableName,
89 IN VOID* DefaultValue,
90 IN OUT UINTN* Size,
91 OUT VOID** Value
92 );
93
94 /**
95 Return the value of the variable defined by its VariableName and VendorGuid
96
97 @param VariableName A Null-terminated string that is the name of the vendor's
98 variable.
99 @param VendorGuid A unique identifier for the vendor.
100 @param DefaultValue Value returned by the function if the variable does not exist
101 @param DataSize On input, the size in bytes of the return Data buffer.
102 On output the size of data returned in Data.
103 @param Value Value read from the UEFI Variable or copy of the default value
104 if the UEFI Variable does not exist
105
106 @retval EFI_SUCCESS All drivers have been connected
107 @retval EFI_NOT_FOUND No handles match the search.
108 @retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results.
109
110 **/
111 EFI_STATUS
112 GetEnvironmentVariable (
113 IN CONST CHAR16* VariableName,
114 IN EFI_GUID* VendorGuid,
115 IN VOID* DefaultValue,
116 IN OUT UINTN* Size,
117 OUT VOID** Value
118 );
119
120 EFI_STATUS
121 BootOptionFromLoadOptionIndex (
122 IN UINT16 LoadOptionIndex,
123 OUT BDS_LOAD_OPTION** BdsLoadOption
124 );
125
126 EFI_STATUS
127 BootOptionFromLoadOptionVariable (
128 IN CHAR16* BootVariableName,
129 OUT BDS_LOAD_OPTION** BdsLoadOption
130 );
131
132 EFI_STATUS
133 BootOptionToLoadOptionVariable (
134 IN BDS_LOAD_OPTION* BdsLoadOption
135 );
136
137 UINT16
138 BootOptionAllocateBootIndex (
139 VOID
140 );
141
142 /**
143 Start a Linux kernel from a Device Path
144
145 @param LinuxKernel Device Path to the Linux Kernel
146 @param Parameters Linux kernel arguments
147
148 @retval EFI_SUCCESS All drivers have been connected
149 @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found
150 @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results.
151
152 **/
153 EFI_STATUS
154 BdsBootLinuxAtag (
155 IN EFI_DEVICE_PATH_PROTOCOL* LinuxKernelDevicePath,
156 IN EFI_DEVICE_PATH_PROTOCOL* InitrdDevicePath,
157 IN CONST CHAR8* Arguments
158 );
159
160 /**
161 Start a Linux kernel from a Device Path
162
163 @param[in] LinuxKernelDevicePath Device Path to the Linux Kernel
164 @param[in] InitrdDevicePath Device Path to the Initrd
165 @param[in] Arguments Linux kernel arguments
166
167 @retval EFI_SUCCESS All drivers have been connected
168 @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found
169 @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results.
170
171 **/
172 EFI_STATUS
173 BdsBootLinuxFdt (
174 IN EFI_DEVICE_PATH_PROTOCOL* LinuxKernelDevicePath,
175 IN EFI_DEVICE_PATH_PROTOCOL* InitrdDevicePath,
176 IN CONST CHAR8* Arguments
177 );
178
179 /**
180 Start an EFI Application from a Device Path
181
182 @param ParentImageHandle Handle of the calling image
183 @param DevicePath Location of the EFI Application
184
185 @retval EFI_SUCCESS All drivers have been connected
186 @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found
187 @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results.
188
189 **/
190 EFI_STATUS
191 BdsStartEfiApplication (
192 IN EFI_HANDLE ParentImageHandle,
193 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
194 IN UINTN LoadOptionsSize,
195 IN VOID* LoadOptions
196 );
197
198 /**
199 Start an EFI Application from any Firmware Volume
200
201 @param EfiApp EFI Application Name
202
203 @retval EFI_SUCCESS All drivers have been connected
204 @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found
205 @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results.
206
207 **/
208 EFI_STATUS
209 BdsLoadApplication (
210 IN EFI_HANDLE ParentImageHandle,
211 IN CHAR16* EfiApp,
212 IN UINTN LoadOptionsSize,
213 IN VOID* LoadOptions
214 );
215
216 EFI_STATUS
217 BdsLoadImage (
218 IN EFI_DEVICE_PATH *DevicePath,
219 IN EFI_ALLOCATE_TYPE Type,
220 IN OUT EFI_PHYSICAL_ADDRESS* Image,
221 OUT UINTN *FileSize
222 );
223
224 /**
225 * Call BS.ExitBootServices with the appropriate Memory Map information
226 */
227 EFI_STATUS
228 ShutdownUefiBootServices (
229 VOID
230 );
231
232 #endif