]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPlatformPkg/Bds/BdsInternal.h
ArmPlatformPkg/Bds: Upgrade the BDS to be more conformed to the UEFI Specification
[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 100
39 #define BOOT_DEVICE_ADDRESS_MAX 20
40
41 typedef enum {
42 BDS_LOADER_EFI_APPLICATION = 0,
43 BDS_LOADER_KERNEL_LINUX_ATAG,
44 BDS_LOADER_KERNEL_LINUX_FDT,
45 } BDS_LOADER_TYPE;
46
47 typedef struct {
48 BDS_LOADER_TYPE LoaderType;
49 CHAR8 Arguments[];
50 } BDS_LOADER_OPTIONAL_DATA;
51
52 typedef enum {
53 BDS_DEVICE_FILESYSTEM = 0,
54 BDS_DEVICE_MEMMAP,
55 BDS_DEVICE_PXE,
56 BDS_DEVICE_TFTP,
57 BDS_DEVICE_MAX
58 } BDS_SUPPORTED_DEVICE_TYPE;
59
60 typedef struct {
61 LIST_ENTRY Link;
62 CHAR16 Description[BOOT_DEVICE_DESCRIPTION_MAX];
63 EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol;
64 struct _BDS_LOAD_OPTION_SUPPORT* Support;
65 } BDS_SUPPORTED_DEVICE;
66
67 #define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)
68
69 typedef UINT8* EFI_LOAD_OPTION;
70
71 typedef struct {
72 LIST_ENTRY Link;
73
74 UINT16 LoadOptionIndex;
75 EFI_LOAD_OPTION LoadOption;
76 UINTN LoadOptionSize;
77
78 UINT32 Attributes;
79 UINT16 FilePathListLength;
80 CHAR16 *Description;
81 EFI_DEVICE_PATH_PROTOCOL *FilePathList;
82 BDS_LOADER_OPTIONAL_DATA *OptionalData;
83 } BDS_LOAD_OPTION;
84
85 typedef struct _BDS_LOAD_OPTION_SUPPORT {
86 BDS_SUPPORTED_DEVICE_TYPE Type;
87 EFI_STATUS (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList);
88 BOOLEAN (*IsSupported)(IN BDS_LOAD_OPTION* BdsLoadOption);
89 EFI_STATUS (*CreateDevicePathNode)(IN BDS_SUPPORTED_DEVICE* BdsLoadOption, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNode, OUT BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);
90 EFI_STATUS (*UpdateDevicePathNode)(IN BDS_LOAD_OPTION *BootOption, OUT EFI_DEVICE_PATH_PROTOCOL** NewDevicePath, OUT BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes);
91 } BDS_LOAD_OPTION_SUPPORT;
92
93 #define LOAD_OPTION_FROM_LINK(a) BASE_CR(a, BDS_LOAD_OPTION, Link)
94
95 EFI_STATUS
96 GetEnvironmentVariable (
97 IN CONST CHAR16* VariableName,
98 IN VOID* DefaultValue,
99 IN OUT UINTN* Size,
100 OUT VOID** Value
101 );
102
103 EFI_STATUS
104 BootDeviceListSupportedInit (
105 IN OUT LIST_ENTRY *SupportedDeviceList
106 );
107
108 EFI_STATUS
109 BootDeviceListSupportedFree (
110 IN LIST_ENTRY *SupportedDeviceList
111 );
112
113 EFI_STATUS
114 BootDeviceGetDeviceSupport (
115 IN BDS_LOAD_OPTION *BootOption,
116 OUT BDS_LOAD_OPTION_SUPPORT** DeviceSupport
117 );
118
119 EFI_STATUS
120 GetHIInputAscii (
121 IN OUT CHAR8 *CmdLine,
122 IN UINTN MaxCmdLine
123 );
124
125 EFI_STATUS
126 EditHIInputAscii (
127 IN OUT CHAR8 *CmdLine,
128 IN UINTN MaxCmdLine
129 );
130
131 EFI_STATUS
132 GetHIInputInteger (
133 IN OUT UINTN *Integer
134 );
135
136 EFI_STATUS
137 GetHIInputIP (
138 OUT EFI_IP_ADDRESS *Ip
139 );
140
141 EFI_STATUS
142 GetHIInputBoolean (
143 OUT BOOLEAN *Value
144 );
145
146 BOOLEAN
147 HasFilePathEfiExtension (
148 IN CHAR16* FilePath
149 );
150
151 EFI_DEVICE_PATH*
152 GetLastDevicePathNode (
153 IN EFI_DEVICE_PATH* DevicePath
154 );
155
156 EFI_STATUS
157 BdsStartBootOption (
158 IN CHAR16* BootOption
159 );
160
161 EFI_STATUS
162 GenerateDeviceDescriptionName (
163 IN EFI_HANDLE Handle,
164 IN OUT CHAR16* Description
165 );
166
167 EFI_STATUS
168 BootOptionList (
169 IN OUT LIST_ENTRY *BootOptionList
170 );
171
172 EFI_STATUS
173 BootOptionParseLoadOption (
174 IN EFI_LOAD_OPTION EfiLoadOption,
175 IN UINTN EfiLoadOptionSize,
176 OUT BDS_LOAD_OPTION **BdsLoadOption
177 );
178
179 EFI_STATUS
180 BootOptionStart (
181 IN BDS_LOAD_OPTION *BootOption
182 );
183
184 EFI_STATUS
185 BootOptionCreate (
186 IN UINT32 Attributes,
187 IN CHAR16* BootDescription,
188 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
189 IN BDS_LOADER_TYPE BootType,
190 IN CHAR8* BootArguments,
191 OUT BDS_LOAD_OPTION **BdsLoadOption
192 );
193
194 EFI_STATUS
195 BootOptionUpdate (
196 IN BDS_LOAD_OPTION *BdsLoadOption,
197 IN UINT32 Attributes,
198 IN CHAR16* BootDescription,
199 IN EFI_DEVICE_PATH_PROTOCOL* DevicePath,
200 IN BDS_LOADER_TYPE BootType,
201 IN CHAR8* BootArguments
202 );
203
204 EFI_STATUS
205 BootOptionDelete (
206 IN BDS_LOAD_OPTION *BootOption
207 );
208
209 EFI_STATUS
210 BootMenuMain (
211 VOID
212 );
213
214 #endif /* _BDSINTERNAL_H_ */