| /** @file | |
| * | |
| * Copyright (c) 2011-2014, ARM Limited. All rights reserved. | |
| * | |
| * This program and the accompanying materials | |
| * are licensed and made available under the terms and conditions of the BSD License | |
| * which accompanies this distribution. The full text of the license may be found at | |
| * http://opensource.org/licenses/bsd-license.php | |
| * | |
| * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| * | |
| **/ | |
| #ifndef _BDSINTERNAL_H_ | |
| #define _BDSINTERNAL_H_ | |
| #include <PiDxe.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/BdsLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/DevicePathLib.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/PrintLib.h> | |
| #include <Library/PcdLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/UefiRuntimeServicesTableLib.h> | |
| #include <Protocol/DevicePathFromText.h> | |
| #include <Protocol/DevicePathToText.h> | |
| #include <Guid/GlobalVariable.h> | |
| #define BOOT_DEVICE_DESCRIPTION_MAX 100 | |
| #define BOOT_DEVICE_FILEPATH_MAX 100 | |
| #define BOOT_DEVICE_OPTION_MAX 300 | |
| #define BOOT_DEVICE_ADDRESS_MAX (sizeof(L"0x0000000000000000")) | |
| #define ARM_BDS_OPTIONAL_DATA_SIGNATURE SIGNATURE_32('a', 'b', 'o', 'd') | |
| #define IS_ARM_BDS_BOOTENTRY(ptr) (ReadUnaligned32 ((CONST UINT32*)&((ARM_BDS_LOADER_OPTIONAL_DATA*)((ptr)->OptionalData))->Header.Signature) == ARM_BDS_OPTIONAL_DATA_SIGNATURE) | |
| #define UPDATE_BOOT_ENTRY L"Update entry: " | |
| #define DELETE_BOOT_ENTRY L"Delete entry: " | |
| typedef enum { | |
| BDS_LOADER_EFI_APPLICATION = 0, | |
| BDS_LOADER_KERNEL_LINUX_ATAG, | |
| BDS_LOADER_KERNEL_LINUX_FDT, | |
| } ARM_BDS_LOADER_TYPE; | |
| typedef struct { | |
| UINT16 CmdLineSize; | |
| UINT16 InitrdSize; | |
| // These following fields have variable length and are packed: | |
| //CHAR8 *CmdLine; | |
| //EFI_DEVICE_PATH_PROTOCOL *InitrdPathList; | |
| } ARM_BDS_LINUX_ARGUMENTS; | |
| typedef union { | |
| ARM_BDS_LINUX_ARGUMENTS LinuxArguments; | |
| } ARM_BDS_LOADER_ARGUMENTS; | |
| typedef struct { | |
| UINT32 Signature; | |
| ARM_BDS_LOADER_TYPE LoaderType; | |
| } ARM_BDS_LOADER_OPTIONAL_DATA_HEADER; | |
| typedef struct { | |
| ARM_BDS_LOADER_OPTIONAL_DATA_HEADER Header; | |
| ARM_BDS_LOADER_ARGUMENTS Arguments; | |
| } ARM_BDS_LOADER_OPTIONAL_DATA; | |
| typedef struct { | |
| LIST_ENTRY Link; | |
| BDS_LOAD_OPTION* BdsLoadOption; | |
| } BDS_LOAD_OPTION_ENTRY; | |
| typedef enum { | |
| BDS_DEVICE_FILESYSTEM = 0, | |
| BDS_DEVICE_MEMMAP, | |
| BDS_DEVICE_PXE, | |
| BDS_DEVICE_TFTP, | |
| BDS_DEVICE_MAX | |
| } BDS_SUPPORTED_DEVICE_TYPE; | |
| typedef struct { | |
| LIST_ENTRY Link; | |
| CHAR16 Description[BOOT_DEVICE_DESCRIPTION_MAX]; | |
| EFI_DEVICE_PATH_PROTOCOL* DevicePathProtocol; | |
| struct _BDS_LOAD_OPTION_SUPPORT* Support; | |
| } BDS_SUPPORTED_DEVICE; | |
| #define SUPPORTED_BOOT_DEVICE_FROM_LINK(a) BASE_CR(a, BDS_SUPPORTED_DEVICE, Link) | |
| typedef struct _BDS_LOAD_OPTION_SUPPORT { | |
| BDS_SUPPORTED_DEVICE_TYPE Type; | |
| EFI_STATUS (*ListDevices)(IN OUT LIST_ENTRY* BdsLoadOptionList); | |
| BOOLEAN (*IsSupported)(IN EFI_DEVICE_PATH *DevicePath); | |
| EFI_STATUS (*CreateDevicePathNode)(IN CHAR16* FileName, OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathNodes, OUT ARM_BDS_LOADER_TYPE *BootType, OUT UINT32 *Attributes); | |
| 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); | |
| } BDS_LOAD_OPTION_SUPPORT; | |
| #define LOAD_OPTION_ENTRY_FROM_LINK(a) BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link) | |
| #define LOAD_OPTION_FROM_LINK(a) ((BDS_LOAD_OPTION_ENTRY*)BASE_CR(a, BDS_LOAD_OPTION_ENTRY, Link))->BdsLoadOption | |
| EFI_STATUS | |
| BootDeviceListSupportedInit ( | |
| IN OUT LIST_ENTRY *SupportedDeviceList | |
| ); | |
| EFI_STATUS | |
| BootDeviceListSupportedFree ( | |
| IN LIST_ENTRY *SupportedDeviceList, | |
| IN BDS_SUPPORTED_DEVICE *Except | |
| ); | |
| EFI_STATUS | |
| BootDeviceGetDeviceSupport ( | |
| IN EFI_DEVICE_PATH *DevicePath, | |
| OUT BDS_LOAD_OPTION_SUPPORT **DeviceSupport | |
| ); | |
| EFI_STATUS | |
| GetHIInputStr ( | |
| IN OUT CHAR16 *CmdLine, | |
| IN UINTN MaxCmdLine | |
| ); | |
| EFI_STATUS | |
| EditHIInputStr ( | |
| IN OUT CHAR16 *CmdLine, | |
| IN UINTN MaxCmdLine | |
| ); | |
| EFI_STATUS | |
| GetHIInputAscii ( | |
| IN OUT CHAR8 *CmdLine, | |
| IN UINTN MaxCmdLine | |
| ); | |
| EFI_STATUS | |
| EditHIInputAscii ( | |
| IN OUT CHAR8 *CmdLine, | |
| IN UINTN MaxCmdLine | |
| ); | |
| EFI_STATUS | |
| GetHIInputInteger ( | |
| IN OUT UINTN *Integer | |
| ); | |
| EFI_STATUS | |
| GetHIInputIP ( | |
| OUT EFI_IP_ADDRESS *Ip | |
| ); | |
| EFI_STATUS | |
| GetHIInputBoolean ( | |
| OUT BOOLEAN *Value | |
| ); | |
| BOOLEAN | |
| HasFilePathEfiExtension ( | |
| IN CHAR16* FilePath | |
| ); | |
| EFI_DEVICE_PATH* | |
| GetLastDevicePathNode ( | |
| IN EFI_DEVICE_PATH* DevicePath | |
| ); | |
| EFI_STATUS | |
| BdsStartBootOption ( | |
| IN CHAR16* BootOption | |
| ); | |
| UINTN | |
| GetUnalignedDevicePathSize ( | |
| IN EFI_DEVICE_PATH* DevicePath | |
| ); | |
| EFI_DEVICE_PATH* | |
| GetAlignedDevicePath ( | |
| IN EFI_DEVICE_PATH* DevicePath | |
| ); | |
| EFI_STATUS | |
| GenerateDeviceDescriptionName ( | |
| IN EFI_HANDLE Handle, | |
| IN OUT CHAR16* Description | |
| ); | |
| EFI_STATUS | |
| BootOptionList ( | |
| IN OUT LIST_ENTRY *BootOptionList | |
| ); | |
| EFI_STATUS | |
| BootOptionParseLoadOption ( | |
| IN EFI_LOAD_OPTION EfiLoadOption, | |
| IN UINTN EfiLoadOptionSize, | |
| OUT BDS_LOAD_OPTION **BdsLoadOption | |
| ); | |
| EFI_STATUS | |
| BootOptionStart ( | |
| IN BDS_LOAD_OPTION *BootOption | |
| ); | |
| EFI_STATUS | |
| BootOptionCreate ( | |
| IN UINT32 Attributes, | |
| IN CHAR16* BootDescription, | |
| IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, | |
| IN ARM_BDS_LOADER_TYPE BootType, | |
| IN ARM_BDS_LOADER_ARGUMENTS* BootArguments, | |
| OUT BDS_LOAD_OPTION** BdsLoadOption | |
| ); | |
| EFI_STATUS | |
| BootOptionUpdate ( | |
| IN BDS_LOAD_OPTION* BdsLoadOption, | |
| IN UINT32 Attributes, | |
| IN CHAR16* BootDescription, | |
| IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, | |
| IN ARM_BDS_LOADER_TYPE BootType, | |
| IN ARM_BDS_LOADER_ARGUMENTS* BootArguments | |
| ); | |
| EFI_STATUS | |
| BootOptionDelete ( | |
| IN BDS_LOAD_OPTION *BootOption | |
| ); | |
| EFI_STATUS | |
| BootMenuMain ( | |
| VOID | |
| ); | |
| #endif /* _BDSINTERNAL_H_ */ |