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