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