]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPlatformPkg/Bds/BdsInternal.h
ArmPkg: Introduce GetGlobalEnvironmentVariable() function.
[mirror_edk2.git] / ArmPlatformPkg / Bds / BdsInternal.h
1 /** @file
2 *
3 * Copyright (c) 2011-2013, 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 (sizeof(L"0x0000000000000000"))
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 #define UPDATE_BOOT_ENTRY L"Update entry: "
46 #define DELETE_BOOT_ENTRY L"Delete entry: "
47
48 typedef enum {
49 BDS_LOADER_EFI_APPLICATION = 0,
50 BDS_LOADER_KERNEL_LINUX_ATAG,
51 BDS_LOADER_KERNEL_LINUX_FDT,
52 } ARM_BDS_LOADER_TYPE;
53
54 typedef struct {
55 UINT16 CmdLineSize;
56 UINT16 InitrdSize;
57
58 // These following fields have variable length and are packed:
59 //CHAR8 *CmdLine;
60 //EFI_DEVICE_PATH_PROTOCOL *InitrdPathList;
61 } ARM_BDS_LINUX_ARGUMENTS;
62
63 typedef union {
64 ARM_BDS_LINUX_ARGUMENTS LinuxArguments;
65 } ARM_BDS_LOADER_ARGUMENTS;
66
67 typedef struct {
68 UINT32 Signature;
69 ARM_BDS_LOADER_TYPE LoaderType;
70 } ARM_BDS_LOADER_OPTIONAL_DATA_HEADER;
71
72 typedef struct {
73 ARM_BDS_LOADER_OPTIONAL_DATA_HEADER Header;
74 ARM_BDS_LOADER_ARGUMENTS Arguments;
75 } ARM_BDS_LOADER_OPTIONAL_DATA;
76
77 typedef struct {
78 LIST_ENTRY Link;
79 BDS_LOAD_OPTION* BdsLoadOption;
80 } BDS_LOAD_OPTION_ENTRY;
81
82 typedef enum {
83 BDS_DEVICE_FILESYSTEM = 0,
84 BDS_DEVICE_MEMMAP,
85 BDS_DEVICE_PXE,
86 BDS_DEVICE_TFTP,
87 BDS_DEVICE_MAX
88 } BDS_SUPPORTED_DEVICE_TYPE;
89
90 typedef struct {
91 LIST_ENTRY Link;
92 CHAR16 Description[BOOT_DEVICE_DESCRIPTION_MAX];
93 EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol;
94 struct _BDS_LOAD_OPTION_SUPPORT* Support;
95 } BDS_SUPPORTED_DEVICE;
96
97 #define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)
98
99 typedef struct _BDS_LOAD_OPTION_SUPPORT {
100 BDS_SUPPORTED_DEVICE_TYPE Type;
101 EFI_STATUS (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList);
102 BOOLEAN (*IsSupported)(IN EFI_DEVICE_PATH *DevicePath);
103 EFI_STATUS (*CreateDevicePathNode)(IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNode, OUT ARM_BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);
104 EFI_STATUS (*UpdateDevicePathNode)(IN EFI_DEVICE_PATH *OldDevicePath, IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath, OUT ARM_BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);
105 } BDS_LOAD_OPTION_SUPPORT;
106
107 #define LOAD_OPTION_ENTRY_FROM_LINK(a) BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link)
108 #define LOAD_OPTION_FROM_LINK(a) ((BDS_LOAD_OPTION_ENTRY*)BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link))->BdsLoadOption
109
110 EFI_STATUS
111 BootDeviceListSupportedInit (
112 IN OUT LIST_ENTRY *SupportedDeviceList
113 );
114
115 EFI_STATUS
116 BootDeviceListSupportedFree (
117 IN LIST_ENTRY *SupportedDeviceList,
118 IN BDS_SUPPORTED_DEVICE *Except
119 );
120
121 EFI_STATUS
122 BootDeviceGetDeviceSupport (
123 IN EFI_DEVICE_PATH *DevicePath,
124 OUT BDS_LOAD_OPTION_SUPPORT **DeviceSupport
125 );
126
127 EFI_STATUS
128 GetHIInputStr (
129 IN OUT CHAR16 *CmdLine,
130 IN UINTN MaxCmdLine
131 );
132
133 EFI_STATUS
134 EditHIInputStr (
135 IN OUT CHAR16 *CmdLine,
136 IN UINTN MaxCmdLine
137 );
138
139 EFI_STATUS
140 GetHIInputAscii (
141 IN OUT CHAR8 *CmdLine,
142 IN UINTN MaxCmdLine
143 );
144
145 EFI_STATUS
146 EditHIInputAscii (
147 IN OUT CHAR8 *CmdLine,
148 IN UINTN MaxCmdLine
149 );
150
151 EFI_STATUS
152 GetHIInputInteger (
153 IN OUT UINTN *Integer
154 );
155
156 EFI_STATUS
157 GetHIInputIP (
158 OUT EFI_IP_ADDRESS *Ip
159 );
160
161 EFI_STATUS
162 GetHIInputBoolean (
163 OUT BOOLEAN *Value
164 );
165
166 BOOLEAN
167 HasFilePathEfiExtension (
168 IN CHAR16* FilePath
169 );
170
171 EFI_DEVICE_PATH*
172 GetLastDevicePathNode (
173 IN EFI_DEVICE_PATH* DevicePath
174 );
175
176 EFI_STATUS
177 BdsStartBootOption (
178 IN CHAR16* BootOption
179 );
180
181 UINTN
182 GetUnalignedDevicePathSize (
183 IN EFI_DEVICE_PATH* DevicePath
184 );
185
186 EFI_DEVICE_PATH*
187 GetAlignedDevicePath (
188 IN EFI_DEVICE_PATH* DevicePath
189 );
190
191 EFI_STATUS
192 GenerateDeviceDescriptionName (
193 IN EFI_HANDLE Handle,
194 IN OUT CHAR16* Description
195 );
196
197 EFI_STATUS
198 BootOptionList (
199 IN OUT LIST_ENTRY *BootOptionList
200 );
201
202 EFI_STATUS
203 BootOptionParseLoadOption (
204 IN EFI_LOAD_OPTION EfiLoadOption,
205 IN UINTN EfiLoadOptionSize,
206 OUT BDS_LOAD_OPTION **BdsLoadOption
207 );
208
209 EFI_STATUS
210 BootOptionStart (
211 IN BDS_LOAD_OPTION *BootOption
212 );
213
214 EFI_STATUS
215 BootOptionCreate (
216 IN UINT32 Attributes,
217 IN CHAR16* BootDescription,
218 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
219 IN ARM_BDS_LOADER_TYPE BootType,
220 IN ARM_BDS_LOADER_ARGUMENTS* BootArguments,
221 OUT BDS_LOAD_OPTION** BdsLoadOption
222 );
223
224 EFI_STATUS
225 BootOptionUpdate (
226 IN BDS_LOAD_OPTION* BdsLoadOption,
227 IN UINT32 Attributes,
228 IN CHAR16* BootDescription,
229 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
230 IN ARM_BDS_LOADER_TYPE BootType,
231 IN ARM_BDS_LOADER_ARGUMENTS* BootArguments
232 );
233
234 EFI_STATUS
235 BootOptionDelete (
236 IN BDS_LOAD_OPTION *BootOption
237 );
238
239 EFI_STATUS
240 BootMenuMain (
241 VOID
242 );
243
244 #endif /* _BDSINTERNAL_H_ */