/** @file | |
A shell application that triggers capsule update process. | |
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _CAPSULE_APP_H_ | |
#define _CAPSULE_APP_H_ | |
#include <Uefi.h> | |
#include <Library/BaseLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/UefiRuntimeServicesTableLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/PrintLib.h> | |
#include <Library/BmpSupportLib.h> | |
#include <Library/FileHandleLib.h> | |
#include <Library/SortLib.h> | |
#include <Library/UefiBootManagerLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <Protocol/GraphicsOutput.h> | |
#include <Protocol/SimpleFileSystem.h> | |
#include <Protocol/ShellParameters.h> | |
#include <Protocol/Shell.h> | |
#include <Protocol/FirmwareManagement.h> | |
#include <Guid/GlobalVariable.h> | |
#include <Guid/CapsuleReport.h> | |
#include <Guid/SystemResourceTable.h> | |
#include <Guid/FmpCapsule.h> | |
#include <Guid/FileInfo.h> | |
#include <Guid/ImageAuthentication.h> | |
#include <Guid/CapsuleVendor.h> | |
#include <Guid/Gpt.h> | |
#include <IndustryStandard/WindowsUxCapsule.h> | |
#define CAPSULE_HEADER_SIZE 0x20 | |
#define NESTED_CAPSULE_HEADER_SIZE SIZE_4KB | |
#define SYSTEM_FIRMWARE_FLAG 0x50000 | |
#define DEVICE_FIRMWARE_FLAG 0x78010 | |
#define MAJOR_VERSION 1 | |
#define MINOR_VERSION 0 | |
#define MAX_CAPSULE_NUM 10 | |
// | |
// (20 * (6+5+2))+1) unicode characters from EFI FAT spec (doubled for bytes) | |
// | |
#define MAX_FILE_NAME_SIZE 522 | |
#define MAX_FILE_NAME_LEN (MAX_FILE_NAME_SIZE / sizeof(CHAR16)) | |
extern UINTN Argc; | |
extern CHAR16 **Argv; | |
/** | |
This function parse application ARG. | |
@return Status | |
**/ | |
EFI_STATUS | |
GetArg ( | |
VOID | |
); | |
/** | |
Get shell protocol. | |
@return Pointer to shell protocol. | |
**/ | |
EFI_SHELL_PROTOCOL * | |
GetShellProtocol ( | |
VOID | |
); | |
/** | |
Read a file. | |
@param[in] FileName The file to be read. | |
@param[out] BufferSize The file buffer size | |
@param[out] Buffer The file buffer | |
@retval EFI_SUCCESS Read file successfully | |
@retval EFI_NOT_FOUND Shell protocol or file not found | |
@retval others Read file failed | |
**/ | |
EFI_STATUS | |
ReadFileToBuffer ( | |
IN CHAR16 *FileName, | |
OUT UINTN *BufferSize, | |
OUT VOID **Buffer | |
); | |
/** | |
Write a file. | |
@param[in] FileName The file to be written. | |
@param[in] BufferSize The file buffer size | |
@param[in] Buffer The file buffer | |
@retval EFI_SUCCESS Write file successfully | |
@retval EFI_NOT_FOUND Shell protocol not found | |
@retval others Write file failed | |
**/ | |
EFI_STATUS | |
WriteFileFromBuffer ( | |
IN CHAR16 *FileName, | |
IN UINTN BufferSize, | |
IN VOID *Buffer | |
); | |
/** | |
Dump capsule information | |
@param[in] CapsuleName The name of the capsule image. | |
@retval EFI_SUCCESS The capsule information is dumped. | |
@retval EFI_UNSUPPORTED Input parameter is not valid. | |
**/ | |
EFI_STATUS | |
DumpCapsule ( | |
IN CHAR16 *CapsuleName | |
); | |
/** | |
Dump capsule status variable. | |
@retval EFI_SUCCESS The capsule status variable is dumped. | |
@retval EFI_UNSUPPORTED Input parameter is not valid. | |
**/ | |
EFI_STATUS | |
DumpCapsuleStatusVariable ( | |
VOID | |
); | |
/** | |
Dump FMP protocol info. | |
**/ | |
VOID | |
DumpFmpData ( | |
VOID | |
); | |
/** | |
Dump FMP image data. | |
@param[in] ImageTypeId The ImageTypeId of the FMP image. | |
It is used to identify the FMP protocol. | |
@param[in] ImageIndex The ImageIndex of the FMP image. | |
It is the input parameter for FMP->GetImage(). | |
@param[in] ImageName The file name to hold the output FMP image. | |
**/ | |
VOID | |
DumpFmpImage ( | |
IN EFI_GUID *ImageTypeId, | |
IN UINTN ImageIndex, | |
IN CHAR16 *ImageName | |
); | |
/** | |
Dump ESRT info. | |
**/ | |
VOID | |
DumpEsrtData ( | |
VOID | |
); | |
/** | |
Dump Provisioned Capsule. | |
@param[in] DumpCapsuleInfo The flag to indicate whether to dump the capsule inforomation. | |
**/ | |
VOID | |
DumpProvisionedCapsule ( | |
IN BOOLEAN DumpCapsuleInfo | |
); | |
/** | |
Dump all EFI System Partition. | |
**/ | |
VOID | |
DumpAllEfiSysPartition ( | |
VOID | |
); | |
/** | |
Get SimpleFileSystem from boot option file path. | |
@param[in] DevicePath The file path of boot option | |
@param[out] FullPath The full device path of boot device | |
@param[out] Fs The file system within EfiSysPartition | |
@retval EFI_SUCCESS Get file system successfully | |
@retval EFI_NOT_FOUND No valid file system found | |
@retval others Get file system failed | |
**/ | |
EFI_STATUS | |
GetEfiSysPartitionFromBootOptionFilePath ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, | |
OUT EFI_DEVICE_PATH_PROTOCOL **FullPath, | |
OUT EFI_SIMPLE_FILE_SYSTEM_PROTOCOL **Fs | |
); | |
/** | |
Process Capsule On Disk. | |
@param[in] CapsuleBuffer An array of pointer to capsule images | |
@param[in] CapsuleBufferSize An array of UINTN to capsule images size | |
@param[in] FilePath An array of capsule images file path | |
@param[in] Map File system mapping string | |
@param[in] CapsuleNum The count of capsule images | |
@retval EFI_SUCCESS Capsule on disk success. | |
@retval others Capsule on disk fail. | |
**/ | |
EFI_STATUS | |
ProcessCapsuleOnDisk ( | |
IN VOID **CapsuleBuffer, | |
IN UINTN *CapsuleBufferSize, | |
IN CHAR16 **FilePath, | |
IN CHAR16 *Map, | |
IN UINTN CapsuleNum | |
); | |
#endif |