3 * Copyright (c) 2011, ARM Limited. All rights reserved.
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
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.
15 #ifndef _BDSINTERNAL_H_
16 #define _BDSINTERNAL_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>
31 #include <Protocol/DevicePathFromText.h>
32 #include <Protocol/DevicePathToText.h>
34 #include <Guid/GlobalVariable.h>
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 20
41 #define ARM_BDS_OPTIONAL_DATA_SIGNATURE SIGNATURE_32('a', 'b', 'o', 'd')
43 #define IS_ARM_BDS_BOOTENTRY(ptr) (ReadUnaligned32 ((CONST UINT32*)&((ARM_BDS_LOADER_OPTIONAL_DATA*)((ptr)->OptionalData))->Header.Signature) == ARM_BDS_OPTIONAL_DATA_SIGNATURE)
45 #define UPDATE_BOOT_ENTRY L"Update entry: "
46 #define DELETE_BOOT_ENTRY L"Delete entry: "
49 BDS_LOADER_EFI_APPLICATION
= 0,
50 BDS_LOADER_KERNEL_LINUX_ATAG
,
51 BDS_LOADER_KERNEL_LINUX_FDT
,
52 } ARM_BDS_LOADER_TYPE
;
58 // These following fields have variable length and are packed:
60 //EFI_DEVICE_PATH_PROTOCOL *InitrdPathList;
61 } ARM_BDS_LINUX_ARGUMENTS
;
64 ARM_BDS_LINUX_ARGUMENTS LinuxArguments
;
65 } ARM_BDS_LOADER_ARGUMENTS
;
69 ARM_BDS_LOADER_TYPE LoaderType
;
70 } ARM_BDS_LOADER_OPTIONAL_DATA_HEADER
;
73 ARM_BDS_LOADER_OPTIONAL_DATA_HEADER Header
;
74 ARM_BDS_LOADER_ARGUMENTS Arguments
;
75 } ARM_BDS_LOADER_OPTIONAL_DATA
;
79 BDS_LOAD_OPTION
* BdsLoadOption
;
80 } BDS_LOAD_OPTION_ENTRY
;
83 BDS_DEVICE_FILESYSTEM
= 0,
88 } BDS_SUPPORTED_DEVICE_TYPE
;
92 CHAR16 Description
[BOOT_DEVICE_DESCRIPTION_MAX
];
93 EFI_DEVICE_PATH_PROTOCOL
* DevicePathProtocol
;
94 struct _BDS_LOAD_OPTION_SUPPORT
* Support
;
95 } BDS_SUPPORTED_DEVICE
;
97 #define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link)
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
;
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
111 GetEnvironmentVariable (
112 IN CONST CHAR16
* VariableName
,
113 IN VOID
* DefaultValue
,
119 BootDeviceListSupportedInit (
120 IN OUT LIST_ENTRY
*SupportedDeviceList
124 BootDeviceListSupportedFree (
125 IN LIST_ENTRY
*SupportedDeviceList
,
126 IN BDS_SUPPORTED_DEVICE
*Except
130 BootDeviceGetDeviceSupport (
131 IN EFI_DEVICE_PATH
*DevicePath
,
132 OUT BDS_LOAD_OPTION_SUPPORT
**DeviceSupport
137 IN OUT CHAR16
*CmdLine
,
143 IN OUT CHAR16
*CmdLine
,
149 IN OUT CHAR8
*CmdLine
,
155 IN OUT CHAR8
*CmdLine
,
161 IN OUT UINTN
*Integer
166 OUT EFI_IP_ADDRESS
*Ip
175 HasFilePathEfiExtension (
180 GetLastDevicePathNode (
181 IN EFI_DEVICE_PATH
* DevicePath
186 IN CHAR16
* BootOption
190 GetUnalignedDevicePathSize (
191 IN EFI_DEVICE_PATH
* DevicePath
195 GetAlignedDevicePath (
196 IN EFI_DEVICE_PATH
* DevicePath
200 GenerateDeviceDescriptionName (
201 IN EFI_HANDLE Handle
,
202 IN OUT CHAR16
* Description
207 IN OUT LIST_ENTRY
*BootOptionList
211 BootOptionParseLoadOption (
212 IN EFI_LOAD_OPTION EfiLoadOption
,
213 IN UINTN EfiLoadOptionSize
,
214 OUT BDS_LOAD_OPTION
**BdsLoadOption
219 IN BDS_LOAD_OPTION
*BootOption
224 IN UINT32 Attributes
,
225 IN CHAR16
* BootDescription
,
226 IN EFI_DEVICE_PATH_PROTOCOL
* DevicePath
,
227 IN ARM_BDS_LOADER_TYPE BootType
,
228 IN ARM_BDS_LOADER_ARGUMENTS
* BootArguments
,
229 OUT BDS_LOAD_OPTION
** BdsLoadOption
234 IN BDS_LOAD_OPTION
* BdsLoadOption
,
235 IN UINT32 Attributes
,
236 IN CHAR16
* BootDescription
,
237 IN EFI_DEVICE_PATH_PROTOCOL
* DevicePath
,
238 IN ARM_BDS_LOADER_TYPE BootType
,
239 IN ARM_BDS_LOADER_ARGUMENTS
* BootArguments
244 IN BDS_LOAD_OPTION
*BootOption
252 #endif /* _BDSINTERNAL_H_ */