mirror of https://github.com/acidanthera/audk.git
235 lines
5.5 KiB
C
235 lines
5.5 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
|