]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/Bds/BdsInternal.h
ArmPlatformPkg/Bds: Got rid of RequestBootType argument
[mirror_edk2.git] / ArmPlatformPkg / Bds / BdsInternal.h
CommitLineData
ea46ebbe 1/** @file\r
2*\r
abc0e107 3* Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
ea46ebbe 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
ea46ebbe 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
656416bc 37#define BOOT_DEVICE_OPTION_MAX 300\r
e34114ea 38#define BOOT_DEVICE_ADDRESS_MAX (sizeof(L"0x0000000000000000"))\r
ea46ebbe 39\r
2ccfb71e 40#define ARM_BDS_OPTIONAL_DATA_SIGNATURE SIGNATURE_32('a', 'b', 'o', 'd')\r
41\r
734b6c33
OM
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
2ccfb71e 46\r
11c20f4e 47#define UPDATE_BOOT_ENTRY L"Update entry: "\r
48#define DELETE_BOOT_ENTRY L"Delete entry: "\r
49\r
ea46ebbe 50typedef enum {\r
51 BDS_LOADER_EFI_APPLICATION = 0,\r
52 BDS_LOADER_KERNEL_LINUX_ATAG,\r
53 BDS_LOADER_KERNEL_LINUX_FDT,\r
2ccfb71e 54} ARM_BDS_LOADER_TYPE;\r
ea46ebbe 55\r
2ccfb71e 56typedef struct {\r
57 UINT16 CmdLineSize;\r
58 UINT16 InitrdSize;\r
c0b2e477 59\r
2ccfb71e 60 // These following fields have variable length and are packed:\r
61 //CHAR8 *CmdLine;\r
62 //EFI_DEVICE_PATH_PROTOCOL *InitrdPathList;\r
63} ARM_BDS_LINUX_ARGUMENTS;\r
656416bc 64\r
65typedef union {\r
2ccfb71e 66 ARM_BDS_LINUX_ARGUMENTS LinuxArguments;\r
67} ARM_BDS_LOADER_ARGUMENTS;\r
656416bc 68\r
ea46ebbe 69typedef struct {\r
2ccfb71e 70 UINT32 Signature;\r
71 ARM_BDS_LOADER_TYPE LoaderType;\r
72} ARM_BDS_LOADER_OPTIONAL_DATA_HEADER;\r
73\r
74typedef struct {\r
75 ARM_BDS_LOADER_OPTIONAL_DATA_HEADER Header;\r
76 ARM_BDS_LOADER_ARGUMENTS Arguments;\r
77} ARM_BDS_LOADER_OPTIONAL_DATA;\r
ea46ebbe 78\r
a6e97d28 79typedef struct {\r
80 LIST_ENTRY Link;\r
81 BDS_LOAD_OPTION* BdsLoadOption;\r
82} BDS_LOAD_OPTION_ENTRY;\r
83\r
ea46ebbe 84typedef enum {\r
85 BDS_DEVICE_FILESYSTEM = 0,\r
86 BDS_DEVICE_MEMMAP,\r
87 BDS_DEVICE_PXE,\r
88 BDS_DEVICE_TFTP,\r
89 BDS_DEVICE_MAX\r
90} BDS_SUPPORTED_DEVICE_TYPE;\r
91\r
92typedef struct {\r
793275a8 93 LIST_ENTRY Link;\r
94 CHAR16 Description[BOOT_DEVICE_DESCRIPTION_MAX];\r
95 EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol;\r
ea46ebbe 96 struct _BDS_LOAD_OPTION_SUPPORT* Support;\r
97} BDS_SUPPORTED_DEVICE;\r
98\r
99#define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)\r
100\r
ea46ebbe 101typedef struct _BDS_LOAD_OPTION_SUPPORT {\r
102 BDS_SUPPORTED_DEVICE_TYPE Type;\r
103 EFI_STATUS (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList);\r
22a262c8 104 BOOLEAN (*IsSupported)(IN EFI_DEVICE_PATH *DevicePath);\r
889ac6a8
RC
105 EFI_STATUS (*CreateDevicePathNode)(IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNodes);\r
106 EFI_STATUS (*UpdateDevicePathNode)(IN EFI_DEVICE_PATH *OldDevicePath, IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath);\r
107\r
108 /// Define if the boot menu should request if the file is a EFI binary or a Linux kernel\r
109 /// Example: PXE boot always deliver a UEFI application.\r
110 BOOLEAN RequestBootType;\r
ea46ebbe 111} BDS_LOAD_OPTION_SUPPORT;\r
112\r
a6e97d28 113#define LOAD_OPTION_ENTRY_FROM_LINK(a) BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link)\r
114#define LOAD_OPTION_FROM_LINK(a) ((BDS_LOAD_OPTION_ENTRY*)BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link))->BdsLoadOption\r
ea46ebbe 115\r
ea46ebbe 116EFI_STATUS\r
117BootDeviceListSupportedInit (\r
118 IN OUT LIST_ENTRY *SupportedDeviceList\r
119 );\r
120\r
121EFI_STATUS\r
122BootDeviceListSupportedFree (\r
656416bc 123 IN LIST_ENTRY *SupportedDeviceList,\r
124 IN BDS_SUPPORTED_DEVICE *Except\r
ea46ebbe 125 );\r
126\r
127EFI_STATUS\r
128BootDeviceGetDeviceSupport (\r
22a262c8 129 IN EFI_DEVICE_PATH *DevicePath,\r
130 OUT BDS_LOAD_OPTION_SUPPORT **DeviceSupport\r
ea46ebbe 131 );\r
132\r
74b96132 133EFI_STATUS\r
134GetHIInputStr (\r
135 IN OUT CHAR16 *CmdLine,\r
136 IN UINTN MaxCmdLine\r
137 );\r
138\r
139EFI_STATUS\r
140EditHIInputStr (\r
141 IN OUT CHAR16 *CmdLine,\r
142 IN UINTN MaxCmdLine\r
143 );\r
144\r
ea46ebbe 145EFI_STATUS\r
146GetHIInputAscii (\r
147 IN OUT CHAR8 *CmdLine,\r
148 IN UINTN MaxCmdLine\r
149 );\r
150\r
151EFI_STATUS\r
152EditHIInputAscii (\r
153 IN OUT CHAR8 *CmdLine,\r
154 IN UINTN MaxCmdLine\r
155 );\r
156\r
157EFI_STATUS\r
158GetHIInputInteger (\r
159 IN OUT UINTN *Integer\r
160 );\r
161\r
162EFI_STATUS\r
163GetHIInputIP (\r
164 OUT EFI_IP_ADDRESS *Ip\r
165 );\r
166\r
8bf4ad44
RC
167EFI_STATUS\r
168EditHIInputIP (\r
169 IN EFI_IP_ADDRESS *InIpAddr,\r
170 OUT EFI_IP_ADDRESS *OutIpAddr\r
171 );\r
172\r
ea46ebbe 173EFI_STATUS\r
174GetHIInputBoolean (\r
175 OUT BOOLEAN *Value\r
176 );\r
177\r
178BOOLEAN\r
179HasFilePathEfiExtension (\r
180 IN CHAR16* FilePath\r
181 );\r
182\r
183EFI_DEVICE_PATH*\r
184GetLastDevicePathNode (\r
185 IN EFI_DEVICE_PATH* DevicePath\r
186 );\r
187\r
188EFI_STATUS\r
189BdsStartBootOption (\r
190 IN CHAR16* BootOption\r
191 );\r
192\r
2ccfb71e 193UINTN\r
194GetUnalignedDevicePathSize (\r
195 IN EFI_DEVICE_PATH* DevicePath\r
196 );\r
197\r
198EFI_DEVICE_PATH*\r
199GetAlignedDevicePath (\r
200 IN EFI_DEVICE_PATH* DevicePath\r
201 );\r
202\r
ea46ebbe 203EFI_STATUS\r
204GenerateDeviceDescriptionName (\r
205 IN EFI_HANDLE Handle,\r
206 IN OUT CHAR16* Description\r
207 );\r
208\r
209EFI_STATUS\r
210BootOptionList (\r
211 IN OUT LIST_ENTRY *BootOptionList\r
212 );\r
213\r
214EFI_STATUS\r
215BootOptionParseLoadOption (\r
216 IN EFI_LOAD_OPTION EfiLoadOption,\r
217 IN UINTN EfiLoadOptionSize,\r
218 OUT BDS_LOAD_OPTION **BdsLoadOption\r
219 );\r
220\r
221EFI_STATUS\r
222BootOptionStart (\r
223 IN BDS_LOAD_OPTION *BootOption\r
224 );\r
225\r
226EFI_STATUS\r
227BootOptionCreate (\r
2ccfb71e 228 IN UINT32 Attributes,\r
229 IN CHAR16* BootDescription,\r
ea46ebbe 230 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
2ccfb71e 231 IN ARM_BDS_LOADER_TYPE BootType,\r
90a44ec4
OM
232 IN UINT8* OptionalData,\r
233 IN UINTN OptionalDataSize,\r
2ccfb71e 234 OUT BDS_LOAD_OPTION** BdsLoadOption\r
ea46ebbe 235 );\r
236\r
237EFI_STATUS\r
238BootOptionUpdate (\r
2ccfb71e 239 IN BDS_LOAD_OPTION* BdsLoadOption,\r
240 IN UINT32 Attributes,\r
241 IN CHAR16* BootDescription,\r
ea46ebbe 242 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
2ccfb71e 243 IN ARM_BDS_LOADER_TYPE BootType,\r
90a44ec4
OM
244 IN UINT8* OptionalData,\r
245 IN UINTN OptionalDataSize\r
ea46ebbe 246 );\r
247\r
248EFI_STATUS\r
249BootOptionDelete (\r
250 IN BDS_LOAD_OPTION *BootOption\r
251 );\r
252\r
55a9f75d
OM
253EFI_STATUS\r
254BootDeviceGetType (\r
255 IN EFI_DEVICE_PATH* DevicePath,\r
256 OUT ARM_BDS_LOADER_TYPE *BootType,\r
257 OUT UINT32 *Attributes\r
258 );\r
259\r
ea46ebbe 260EFI_STATUS\r
261BootMenuMain (\r
262 VOID\r
263 );\r
264\r
9fc9aa46
OM
265BOOLEAN\r
266IsUnicodeString (\r
267 IN VOID* String\r
268 );\r
269\r
135b09a2
OM
270/*\r
271 * Try to detect if the given string is an ASCII or Unicode string\r
272 *\r
273 * There are actually few limitation to this function but it is mainly to give\r
274 * a user friendly output.\r
275 *\r
276 * Some limitations:\r
277 * - it only supports unicode string that use ASCII character (< 0x100)\r
278 * - single character ASCII strings are interpreted as Unicode string\r
279 * - string cannot be longer than 2 x BOOT_DEVICE_OPTION_MAX (600 bytes)\r
280 *\r
281 * @param String Buffer that might contain a Unicode or Ascii string\r
282 * @param IsUnicode If not NULL this boolean value returns if the string is an\r
283 * ASCII or Unicode string.\r
284 */\r
285BOOLEAN\r
286IsPrintableString (\r
287 IN VOID* String,\r
288 OUT BOOLEAN *IsUnicode\r
289 );\r
290\r
ea46ebbe 291#endif /* _BDSINTERNAL_H_ */\r