]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/Bds/BdsInternal.h
ArmPlatformPkg/Bds: Add a signature in front of the Boot Argument propoer to this Bds
[mirror_edk2.git] / ArmPlatformPkg / Bds / BdsInternal.h
CommitLineData
ea46ebbe 1/** @file\r
2*\r
3* Copyright (c) 2011, 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/BdsUnixLib.h>\r
22#include <Library/DebugLib.h>\r
23#include <Library/DevicePathLib.h>\r
24#include <Library/UefiLib.h>\r
25#include <Library/PrintLib.h>\r
26#include <Library/PcdLib.h>\r
27#include <Library/MemoryAllocationLib.h>\r
28#include <Library/UefiBootServicesTableLib.h>\r
29#include <Library/UefiRuntimeServicesTableLib.h>\r
30\r
31#include <Protocol/DevicePathFromText.h>\r
32#include <Protocol/DevicePathToText.h>\r
33\r
34#include <Guid/GlobalVariable.h>\r
35\r
36#define BOOT_DEVICE_DESCRIPTION_MAX 100\r
37#define BOOT_DEVICE_FILEPATH_MAX 100\r
656416bc 38#define BOOT_DEVICE_OPTION_MAX 300\r
ea46ebbe 39#define BOOT_DEVICE_ADDRESS_MAX 20\r
40\r
2ccfb71e 41#define ARM_BDS_OPTIONAL_DATA_SIGNATURE SIGNATURE_32('a', 'b', 'o', 'd')\r
42\r
43#define IS_ARM_BDS_BOOTENTRY(ptr) (ReadUnaligned32 ((CONST UINT32*)&((ARM_BDS_LOADER_OPTIONAL_DATA*)((ptr)->OptionalData))->Header.Signature) == ARM_BDS_OPTIONAL_DATA_SIGNATURE)\r
44\r
ea46ebbe 45typedef enum {\r
46 BDS_LOADER_EFI_APPLICATION = 0,\r
47 BDS_LOADER_KERNEL_LINUX_ATAG,\r
48 BDS_LOADER_KERNEL_LINUX_FDT,\r
2ccfb71e 49} ARM_BDS_LOADER_TYPE;\r
ea46ebbe 50\r
2ccfb71e 51typedef struct {\r
52 UINT16 CmdLineSize;\r
53 UINT16 InitrdSize;\r
54 \r
55 // These following fields have variable length and are packed:\r
56 //CHAR8 *CmdLine;\r
57 //EFI_DEVICE_PATH_PROTOCOL *InitrdPathList;\r
58} ARM_BDS_LINUX_ARGUMENTS;\r
656416bc 59\r
60typedef union {\r
2ccfb71e 61 ARM_BDS_LINUX_ARGUMENTS LinuxArguments;\r
62} ARM_BDS_LOADER_ARGUMENTS;\r
656416bc 63\r
ea46ebbe 64typedef struct {\r
2ccfb71e 65 UINT32 Signature;\r
66 ARM_BDS_LOADER_TYPE LoaderType;\r
67} ARM_BDS_LOADER_OPTIONAL_DATA_HEADER;\r
68\r
69typedef struct {\r
70 ARM_BDS_LOADER_OPTIONAL_DATA_HEADER Header;\r
71 ARM_BDS_LOADER_ARGUMENTS Arguments;\r
72} ARM_BDS_LOADER_OPTIONAL_DATA;\r
ea46ebbe 73\r
74typedef enum {\r
75 BDS_DEVICE_FILESYSTEM = 0,\r
76 BDS_DEVICE_MEMMAP,\r
77 BDS_DEVICE_PXE,\r
78 BDS_DEVICE_TFTP,\r
79 BDS_DEVICE_MAX\r
80} BDS_SUPPORTED_DEVICE_TYPE;\r
81\r
82typedef struct {\r
83 LIST_ENTRY Link;\r
84 CHAR16 Description[BOOT_DEVICE_DESCRIPTION_MAX];\r
85 EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol;\r
86 struct _BDS_LOAD_OPTION_SUPPORT* Support;\r
87} BDS_SUPPORTED_DEVICE;\r
88\r
89#define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)\r
90\r
91typedef UINT8* EFI_LOAD_OPTION;\r
92\r
656416bc 93/* This is defined by the UEFI specs, don't change it */\r
ea46ebbe 94typedef struct {\r
95 LIST_ENTRY Link;\r
96\r
97 UINT16 LoadOptionIndex;\r
98 EFI_LOAD_OPTION LoadOption;\r
99 UINTN LoadOptionSize;\r
100\r
101 UINT32 Attributes;\r
102 UINT16 FilePathListLength;\r
103 CHAR16 *Description;\r
104 EFI_DEVICE_PATH_PROTOCOL *FilePathList;\r
105 BDS_LOADER_OPTIONAL_DATA *OptionalData;\r
106} BDS_LOAD_OPTION;\r
107\r
108typedef struct _BDS_LOAD_OPTION_SUPPORT {\r
109 BDS_SUPPORTED_DEVICE_TYPE Type;\r
110 EFI_STATUS (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList);\r
111 BOOLEAN (*IsSupported)(IN BDS_LOAD_OPTION* BdsLoadOption);\r
2ccfb71e 112 EFI_STATUS (*CreateDevicePathNode)(IN BDS_SUPPORTED_DEVICE* BdsLoadOption, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNode, OUT ARM_BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);\r
113 EFI_STATUS (*UpdateDevicePathNode)(IN EFI_DEVICE_PATH *OldDevicePath, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath, OUT ARM_BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);\r
ea46ebbe 114} BDS_LOAD_OPTION_SUPPORT;\r
115\r
116#define LOAD_OPTION_FROM_LINK(a) BASE_CR(a, BDS_LOAD_OPTION, Link)\r
117\r
118EFI_STATUS\r
119GetEnvironmentVariable (\r
120 IN CONST CHAR16* VariableName,\r
121 IN VOID* DefaultValue,\r
122 IN OUT UINTN* Size,\r
123 OUT VOID** Value\r
124 );\r
125\r
126EFI_STATUS\r
127BootDeviceListSupportedInit (\r
128 IN OUT LIST_ENTRY *SupportedDeviceList\r
129 );\r
130\r
131EFI_STATUS\r
132BootDeviceListSupportedFree (\r
656416bc 133 IN LIST_ENTRY *SupportedDeviceList,\r
134 IN BDS_SUPPORTED_DEVICE *Except\r
ea46ebbe 135 );\r
136\r
137EFI_STATUS\r
138BootDeviceGetDeviceSupport (\r
139 IN BDS_LOAD_OPTION *BootOption,\r
140 OUT BDS_LOAD_OPTION_SUPPORT** DeviceSupport\r
141 );\r
142\r
74b96132 143EFI_STATUS\r
144GetHIInputStr (\r
145 IN OUT CHAR16 *CmdLine,\r
146 IN UINTN MaxCmdLine\r
147 );\r
148\r
149EFI_STATUS\r
150EditHIInputStr (\r
151 IN OUT CHAR16 *CmdLine,\r
152 IN UINTN MaxCmdLine\r
153 );\r
154\r
ea46ebbe 155EFI_STATUS\r
156GetHIInputAscii (\r
157 IN OUT CHAR8 *CmdLine,\r
158 IN UINTN MaxCmdLine\r
159 );\r
160\r
161EFI_STATUS\r
162EditHIInputAscii (\r
163 IN OUT CHAR8 *CmdLine,\r
164 IN UINTN MaxCmdLine\r
165 );\r
166\r
167EFI_STATUS\r
168GetHIInputInteger (\r
169 IN OUT UINTN *Integer\r
170 );\r
171\r
172EFI_STATUS\r
173GetHIInputIP (\r
174 OUT EFI_IP_ADDRESS *Ip\r
175 );\r
176\r
177EFI_STATUS\r
178GetHIInputBoolean (\r
179 OUT BOOLEAN *Value\r
180 );\r
181\r
182BOOLEAN\r
183HasFilePathEfiExtension (\r
184 IN CHAR16* FilePath\r
185 );\r
186\r
187EFI_DEVICE_PATH*\r
188GetLastDevicePathNode (\r
189 IN EFI_DEVICE_PATH* DevicePath\r
190 );\r
191\r
192EFI_STATUS\r
193BdsStartBootOption (\r
194 IN CHAR16* BootOption\r
195 );\r
196\r
2ccfb71e 197UINTN\r
198GetUnalignedDevicePathSize (\r
199 IN EFI_DEVICE_PATH* DevicePath\r
200 );\r
201\r
202EFI_DEVICE_PATH*\r
203GetAlignedDevicePath (\r
204 IN EFI_DEVICE_PATH* DevicePath\r
205 );\r
206\r
ea46ebbe 207EFI_STATUS\r
208GenerateDeviceDescriptionName (\r
209 IN EFI_HANDLE Handle,\r
210 IN OUT CHAR16* Description\r
211 );\r
212\r
213EFI_STATUS\r
214BootOptionList (\r
215 IN OUT LIST_ENTRY *BootOptionList\r
216 );\r
217\r
218EFI_STATUS\r
219BootOptionParseLoadOption (\r
220 IN EFI_LOAD_OPTION EfiLoadOption,\r
221 IN UINTN EfiLoadOptionSize,\r
222 OUT BDS_LOAD_OPTION **BdsLoadOption\r
223 );\r
224\r
225EFI_STATUS\r
226BootOptionStart (\r
227 IN BDS_LOAD_OPTION *BootOption\r
228 );\r
229\r
230EFI_STATUS\r
231BootOptionCreate (\r
2ccfb71e 232 IN UINT32 Attributes,\r
233 IN CHAR16* BootDescription,\r
ea46ebbe 234 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
2ccfb71e 235 IN ARM_BDS_LOADER_TYPE BootType,\r
236 IN ARM_BDS_LOADER_ARGUMENTS* BootArguments,\r
237 OUT BDS_LOAD_OPTION** BdsLoadOption\r
ea46ebbe 238 );\r
239\r
240EFI_STATUS\r
241BootOptionUpdate (\r
2ccfb71e 242 IN BDS_LOAD_OPTION* BdsLoadOption,\r
243 IN UINT32 Attributes,\r
244 IN CHAR16* BootDescription,\r
ea46ebbe 245 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,\r
2ccfb71e 246 IN ARM_BDS_LOADER_TYPE BootType,\r
247 IN ARM_BDS_LOADER_ARGUMENTS* BootArguments\r
ea46ebbe 248 );\r
249\r
250EFI_STATUS\r
251BootOptionDelete (\r
252 IN BDS_LOAD_OPTION *BootOption\r
253 );\r
254\r
255EFI_STATUS\r
256BootMenuMain (\r
257 VOID\r
258 );\r
259\r
260#endif /* _BDSINTERNAL_H_ */\r