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