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