]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - ArmPlatformPkg/Bds/BdsInternal.h
ArmPlatformPkg/Bds: Added boot options reordering
[mirror_edk2.git] / ArmPlatformPkg / Bds / BdsInternal.h
... / ...
CommitLineData
1/** @file\r
2*\r
3* Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
4*\r
5* This program and the accompanying materials\r
6* are licensed and made available under the terms and conditions of the BSD License\r
7* which accompanies this distribution. The full text of the license may be found at\r
8* http://opensource.org/licenses/bsd-license.php\r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12*\r
13**/\r
14\r
15#ifndef _BDSINTERNAL_H_\r
16#define _BDSINTERNAL_H_\r
17\r
18#include <PiDxe.h>\r
19#include <Library/BaseMemoryLib.h>\r
20#include <Library/BdsLib.h>\r
21#include <Library/DebugLib.h>\r
22#include <Library/DevicePathLib.h>\r
23#include <Library/UefiLib.h>\r
24#include <Library/PrintLib.h>\r
25#include <Library/PcdLib.h>\r
26#include <Library/MemoryAllocationLib.h>\r
27#include <Library/UefiBootServicesTableLib.h>\r
28#include <Library/UefiRuntimeServicesTableLib.h>\r
29\r
30#include <Protocol/DevicePathFromText.h>\r
31#include <Protocol/DevicePathToText.h>\r
32\r
33#include <Guid/GlobalVariable.h>\r
34\r
35#define BOOT_DEVICE_DESCRIPTION_MAX 100\r
36#define BOOT_DEVICE_FILEPATH_MAX 100\r
37#define BOOT_DEVICE_OPTION_MAX 300\r
38#define BOOT_DEVICE_ADDRESS_MAX (sizeof(L"0x0000000000000000"))\r
39\r
40#define ARM_BDS_OPTIONAL_DATA_SIGNATURE SIGNATURE_32('a', 'b', 'o', 'd')\r
41\r
42#define IS_ARM_BDS_BOOTENTRY(ptr) \\r
43 (((ptr)->OptionalData != NULL) && \\r
44 (ReadUnaligned32 ((CONST UINT32*)&((ARM_BDS_LOADER_OPTIONAL_DATA*)((ptr)->OptionalData))->Header.Signature) \\r
45 == ARM_BDS_OPTIONAL_DATA_SIGNATURE))\r
46\r
47#define UPDATE_BOOT_ENTRY L"Update entry: "\r
48#define DELETE_BOOT_ENTRY L"Delete entry: "\r
49#define MOVE_BOOT_ENTRY L"Move entry: "\r
50\r
51typedef enum {\r
52 BDS_LOADER_EFI_APPLICATION = 0,\r
53 BDS_LOADER_KERNEL_LINUX_ATAG,\r
54 BDS_LOADER_KERNEL_LINUX_FDT,\r
55} ARM_BDS_LOADER_TYPE;\r
56\r
57typedef struct {\r
58 UINT16 CmdLineSize;\r
59 UINT16 InitrdSize;\r
60\r
61 // These following fields have variable length and are packed:\r
62 //CHAR8 *CmdLine;\r
63 //EFI_DEVICE_PATH_PROTOCOL *InitrdPathList;\r
64} ARM_BDS_LINUX_ARGUMENTS;\r
65\r
66typedef union {\r
67 ARM_BDS_LINUX_ARGUMENTS LinuxArguments;\r
68} ARM_BDS_LOADER_ARGUMENTS;\r
69\r
70typedef struct {\r
71 UINT32 Signature;\r
72 ARM_BDS_LOADER_TYPE LoaderType;\r
73} ARM_BDS_LOADER_OPTIONAL_DATA_HEADER;\r
74\r
75typedef struct {\r
76 ARM_BDS_LOADER_OPTIONAL_DATA_HEADER Header;\r
77 ARM_BDS_LOADER_ARGUMENTS Arguments;\r
78} ARM_BDS_LOADER_OPTIONAL_DATA;\r
79\r
80typedef struct {\r
81 LIST_ENTRY Link;\r
82 BDS_LOAD_OPTION* BdsLoadOption;\r
83} BDS_LOAD_OPTION_ENTRY;\r
84\r
85typedef enum {\r
86 BDS_DEVICE_FILESYSTEM = 0,\r
87 BDS_DEVICE_MEMMAP,\r
88 BDS_DEVICE_PXE,\r
89 BDS_DEVICE_TFTP,\r
90 BDS_DEVICE_MAX\r
91} BDS_SUPPORTED_DEVICE_TYPE;\r
92\r
93typedef struct {\r
94 LIST_ENTRY Link;\r
95 CHAR16 Description[BOOT_DEVICE_DESCRIPTION_MAX];\r
96 EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol;\r
97 struct _BDS_LOAD_OPTION_SUPPORT* Support;\r
98} BDS_SUPPORTED_DEVICE;\r
99\r
100#define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)\r
101\r
102typedef struct _BDS_LOAD_OPTION_SUPPORT {\r
103 BDS_SUPPORTED_DEVICE_TYPE Type;\r
104 EFI_STATUS (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList);\r
105 BOOLEAN (*IsSupported)(IN EFI_DEVICE_PATH *DevicePath);\r
106 EFI_STATUS (*CreateDevicePathNode)(IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNodes);\r
107 EFI_STATUS (*UpdateDevicePathNode)(IN EFI_DEVICE_PATH *OldDevicePath, IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath);\r
108\r
109 /// Define if the boot menu should request if the file is a EFI binary or a Linux kernel\r
110 /// Example: PXE boot always deliver a UEFI application.\r
111 BOOLEAN RequestBootType;\r
112} BDS_LOAD_OPTION_SUPPORT;\r
113\r
114#define LOAD_OPTION_ENTRY_FROM_LINK(a) BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link)\r
115#define LOAD_OPTION_FROM_LINK(a) ((BDS_LOAD_OPTION_ENTRY*)BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link))->BdsLoadOption\r
116\r
117EFI_STATUS\r
118BootDeviceListSupportedInit (\r
119 IN OUT LIST_ENTRY *SupportedDeviceList\r
120 );\r
121\r
122EFI_STATUS\r
123BootDeviceListSupportedFree (\r
124 IN LIST_ENTRY *SupportedDeviceList,\r
125 IN BDS_SUPPORTED_DEVICE *Except\r
126 );\r
127\r
128EFI_STATUS\r
129BootDeviceGetDeviceSupport (\r
130 IN EFI_DEVICE_PATH *DevicePath,\r
131 OUT BDS_LOAD_OPTION_SUPPORT **DeviceSupport\r
132 );\r
133\r
134EFI_STATUS\r
135GetHIInputStr (\r
136 IN OUT CHAR16 *CmdLine,\r
137 IN UINTN MaxCmdLine\r
138 );\r
139\r
140EFI_STATUS\r
141EditHIInputStr (\r
142 IN OUT CHAR16 *CmdLine,\r
143 IN UINTN MaxCmdLine\r
144 );\r
145\r
146EFI_STATUS\r
147GetHIInputAscii (\r
148 IN OUT CHAR8 *CmdLine,\r
149 IN UINTN MaxCmdLine\r
150 );\r
151\r
152EFI_STATUS\r
153EditHIInputAscii (\r
154 IN OUT CHAR8 *CmdLine,\r
155 IN UINTN MaxCmdLine\r
156 );\r
157\r
158EFI_STATUS\r
159GetHIInputInteger (\r
160 IN OUT UINTN *Integer\r
161 );\r
162\r
163EFI_STATUS\r
164GetHIInputIP (\r
165 OUT EFI_IP_ADDRESS *Ip\r
166 );\r
167\r
168EFI_STATUS\r
169EditHIInputIP (\r
170 IN EFI_IP_ADDRESS *InIpAddr,\r
171 OUT EFI_IP_ADDRESS *OutIpAddr\r
172 );\r
173\r
174EFI_STATUS\r
175GetHIInputBoolean (\r
176 OUT BOOLEAN *Value\r
177 );\r
178\r
179BOOLEAN\r
180HasFilePathEfiExtension (\r
181 IN CHAR16* FilePath\r
182 );\r
183\r
184EFI_DEVICE_PATH*\r
185GetLastDevicePathNode (\r
186 IN EFI_DEVICE_PATH* DevicePath\r
187 );\r
188\r
189EFI_STATUS\r
190BdsStartBootOption (\r
191 IN CHAR16* BootOption\r
192 );\r
193\r
194UINTN\r
195GetUnalignedDevicePathSize (\r
196 IN EFI_DEVICE_PATH* DevicePath\r
197 );\r
198\r
199EFI_DEVICE_PATH*\r
200GetAlignedDevicePath (\r
201 IN EFI_DEVICE_PATH* DevicePath\r
202 );\r
203\r
204EFI_STATUS\r
205GenerateDeviceDescriptionName (\r
206 IN EFI_HANDLE Handle,\r
207 IN OUT CHAR16* Description\r
208 );\r
209\r
210EFI_STATUS\r
211BootOptionList (\r
212 IN OUT LIST_ENTRY *BootOptionList\r
213 );\r
214\r
215EFI_STATUS\r
216BootOptionParseLoadOption (\r
217 IN EFI_LOAD_OPTION EfiLoadOption,\r
218 IN UINTN EfiLoadOptionSize,\r
219 OUT BDS_LOAD_OPTION **BdsLoadOption\r
220 );\r
221\r
222EFI_STATUS\r
223BootOptionStart (\r
224 IN BDS_LOAD_OPTION *BootOption\r
225 );\r
226\r
227EFI_STATUS\r
228BootOptionCreate (\r
229 IN UINT32 Attributes,\r
230 IN CHAR16* BootDescription,\r
231 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
232 IN ARM_BDS_LOADER_TYPE BootType,\r
233 IN UINT8* OptionalData,\r
234 IN UINTN OptionalDataSize,\r
235 OUT BDS_LOAD_OPTION** BdsLoadOption\r
236 );\r
237\r
238EFI_STATUS\r
239BootOptionUpdate (\r
240 IN BDS_LOAD_OPTION* BdsLoadOption,\r
241 IN UINT32 Attributes,\r
242 IN CHAR16* BootDescription,\r
243 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
244 IN ARM_BDS_LOADER_TYPE BootType,\r
245 IN UINT8* OptionalData,\r
246 IN UINTN OptionalDataSize\r
247 );\r
248\r
249EFI_STATUS\r
250BootOptionDelete (\r
251 IN BDS_LOAD_OPTION *BootOption\r
252 );\r
253\r
254EFI_STATUS\r
255BootDeviceGetType (\r
256 IN EFI_DEVICE_PATH* DevicePath,\r
257 OUT ARM_BDS_LOADER_TYPE *BootType,\r
258 OUT UINT32 *Attributes\r
259 );\r
260\r
261EFI_STATUS\r
262BootMenuMain (\r
263 VOID\r
264 );\r
265\r
266BOOLEAN\r
267IsUnicodeString (\r
268 IN VOID* String\r
269 );\r
270\r
271/*\r
272 * Try to detect if the given string is an ASCII or Unicode string\r
273 *\r
274 * There are actually few limitation to this function but it is mainly to give\r
275 * a user friendly output.\r
276 *\r
277 * Some limitations:\r
278 * - it only supports unicode string that use ASCII character (< 0x100)\r
279 * - single character ASCII strings are interpreted as Unicode string\r
280 * - string cannot be longer than 2 x BOOT_DEVICE_OPTION_MAX (600 bytes)\r
281 *\r
282 * @param String Buffer that might contain a Unicode or Ascii string\r
283 * @param IsUnicode If not NULL this boolean value returns if the string is an\r
284 * ASCII or Unicode string.\r
285 */\r
286BOOLEAN\r
287IsPrintableString (\r
288 IN VOID* String,\r
289 OUT BOOLEAN *IsUnicode\r
290 );\r
291\r
292#endif /* _BDSINTERNAL_H_ */\r