mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-14 10:05:43 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
241 lines
5.9 KiB
C
241 lines
5.9 KiB
C
/** @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
|
|
|