ICE_TEA_BIOS/Board/Oem/L05AlderLakeHXMultiBoardPkg/Include/Library/FWUpdateLib.h
LCFC\AiXia.Jiang a870bff2f4 1.Frist commit
2022-09-30 14:59:06 +08:00

366 lines
14 KiB
C

/*++
Copyright (C) 2009-2018 Intel Corporation
SPDX-License-Identifier: BSD-2-Clause
File Name:
FwUpdateLib.h
Abstract:
FW Update Library Header file.
--*/
#ifndef __FWUPDATELIB_H__
#define __FWUPDATELIB_H__
#define FPT_PARTITION_NAME_FTPR 0x52505446
#define FPT_PARTITION_NAME_RBEP 0x50454252
#define FPT_PARTITION_NAME_NFTP 0x5054464E
#define FPT_PARTITION_NAME_PMCP 0x50434D50
#define FPT_PARTITION_NAME_PCHC 0x43484350
#define FPT_PARTITION_NAME_OEMP 0x504D454F
#define FPT_PARTITION_NAME_ISHC 0x43485349
#define FPT_PARTITION_NAME_IUNP 0x504E5549
#define FPT_PARTITION_NAME_LOCL 0x4C434F4C
#define FPT_PARTITION_NAME_WCOD 0x444F4357
#define FPT_PARTITION_NAME_IOMP 0x504D4F49
#define FPT_PARTITION_NAME_NPHY 0x5948504E
#define FPT_PARTITION_NAME_TBTP 0x50544254
#define FPT_PARTITION_NAME_SPHY 0x59485053
#define FPT_PARTITION_NAME_ISIF 0x46495349
#define FPT_PARTITION_NAME_SAMF 0x464D4153
#define FPT_PARTITION_NAME_PPHY 0x59485050
#define FPT_PARTITION_NAME_GBST 0x54534247
#define FPT_PARTITION_NAME_PSEP 0x50455350
#define FPT_PARTITION_NAME_ADSP 0x50534441
#define MFT_PART_INFO_EXT_UPDATE_ACTION_NONE 0
#define MFT_PART_INFO_EXT_UPDATE_ACTION_HOST_RESET 1
#define MFT_PART_INFO_EXT_UPDATE_ACTION_CSE_RESET 2
#define MFT_PART_INFO_EXT_UPDATE_ACTION_GLOBAL_RESET 3
#define FW_UPDATE_DISABLED 0 // Full Disabled. Partial Enabled.
#define FW_UPDATE_ENABLED 1 // Full Enabled. Partial Enabled.
#define FW_UPDATE_FULL_AND_PARTIAL_DISABLED 3 // Full Disabled. Partial Disabled.
#define FWU_FW_TYPE_INVALID 0
#define FWU_FW_TYPE_RESERVED 1
#define FWU_FW_TYPE_SLIM 2
#define FWU_FW_TYPE_CONSUMER 3
#define FWU_FW_TYPE_CORPORATE 4
#define FWU_PCH_SKU_INVALID 0
#define FWU_PCH_SKU_H 1
#define FWU_PCH_SKU_LP 2
#define FWU_PRODUCT_SEGMENT_CLIENT 1
#define FWU_PRODUCT_SEGMENT_HEDT 2
#define FWU_PRODUCT_SEGMENT_WS 3
#define FWU_PRODUCT_SEGMENT_CONVERGED_MOBILITY 4
#define FWU_PRODUCT_SEGMENT_IOT 5
#define FWU_PRODUCT_SEGMENT_SMALL_CORE_ENTRY_LEVEL 6
#define CALL_CONV
typedef struct __UUID
{
UINT32 Data1;
UINT16 Data2;
UINT16 Data3;
UINT8 Data4[8];
} _UUID;
/**
Starting a Full FW Update from a buffer.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@param[in] OemId OEM ID to compare with OEM ID in FW (if exist). Can be NULL.
@param[in] Func A callback function that reports the progress of sending the buffer
to FW (not the progress of the update itself). Can be NULL.
void* Func(UINT32 BytesSentToFw, UINT32 TotalBytesToSendToFw);
@retval SUCCESS If Update started successfully. Error code otherwise.
**/
UINT32 FwuFullUpdateFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength,
IN _UUID *OemId,
IN void(*Func)(UINT32, UINT32));
/**
Starting a Partial FW Update from a buffer.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@param[in] PartitionId ID of partition to update. Only partitions that are allowed to be partially updated.
@param[in] Func A callback function that reports the progress of sending the buffer
to FW (not the progress of the update itself). Can be NULL.
void* Func(UINT32 BytesSentToFw, UINT32 TotalBytesToSendToFw);
@retval SUCCESS If Update started successfully. Error code otherwise.
**/
UINT32 FwuPartialUpdateFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength,
IN UINT32 PartitionId,
IN void(*Func)(UINT32, UINT32));
/**
Check for Update progress.
If in progress, return the current percent.
If finished, return the status of the update, and the needed reset type after the update.
This function should be called only after starting the update by calling FwuUpdateFull/Partial...
@param[out] InProgress True if Update is still in progress. False if Update finished. Caller allocated.
@param[out] CurrentPercent Current percent of the update, if Update is in progress. Caller allocated.
@param[out] FwUpdateStatus FW error code status of the update, if it finished (success or error code). Caller allocated.
@param[out] NeededResetType Needed reset type after the update, if it finished. Caller allocated.
MFT_PART_INFO_EXT_UPDATE_ACTION_NONE 0
MFT_PART_INFO_EXT_UPDATE_ACTION_HOST_RESET 1
MFT_PART_INFO_EXT_UPDATE_ACTION_CSE_RESET 2
MFT_PART_INFO_EXT_UPDATE_ACTION_GLOBAL_RESET 3
@retval SUCCESS If Update is still in progress, or finished successfully. Error code otherwise.
**/
UINT32 FwuCheckUpdateProgress(OUT BOOLEAN *InProgress,
OUT UINT32 *CurrentPercent,
OUT UINT32 *FwUpdateStatus,
OUT UINT32 *NeededResetType);
/**
Get FW Update enabling state.
@param[out] EnabledState FW Update enabling state. Caller allocated.
FW_UPDATE_DISABLED = 0. Full Disabled. Partial Enabled.
FW_UPDATE_ENABLED = 1. Full Enabled. Partial Enabled.
FW_UPDATE_FULL_AND_PARTIAL_DISABLED = 3. Full Disabled. Partial Disabled.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuEnabledState(OUT UINT16 *EnabledState);
/**
Set FW Update enabling state.
Supported only before EOP.
@param[in] EnabledState FW Update enabling state.
FW_UPDATE_DISABLED = 0. Full Disabled. Partial Enabled.
FW_UPDATE_ENABLED = 1. Full Enabled. Partial Enabled.
FW_UPDATE_FULL_AND_PARTIAL_DISABLED = 3. Full Disabled. Partial Disabled.
@return SUCCESS If succeeded. Error code otherwise.
*/
UINT32 FwuSetEnabledState(IN UINT32 EnabledState);
/**
Get OEM ID from flash.
@param[out] OemId OEM ID from flash. Caller allocated.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuOemId(OUT _UUID *OemId);
/**
Get FW Type, from the flash image.
@param[out] FwType FW Type. Caller allocated.
FWU_FW_TYPE_INVALID 0
FWU_FW_TYPE_RESERVED 1
FWU_FW_TYPE_SLIM 2
FWU_FW_TYPE_CONSUMER 3
FWU_FW_TYPE_CORPORATE 4
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuFwType(OUT UINT32 *FwType);
/**
@brief Get FW Type, from the Update Image buffer.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@param[out] FwType FW Type. Caller allocated.
FWU_FW_TYPE_INVALID 0
FWU_FW_TYPE_RESERVED 1
FWU_FW_TYPE_SLIM 2
FWU_FW_TYPE_CONSUMER 3
FWU_FW_TYPE_CORPORATE 4
@return SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuFwTypeFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength,
OUT UINT32 *FwType);
/**
Get PCH SKU, from the flash image.
@param[out] PchSku PCH SKU. Caller allocated.
FWU_PCH_SKU_INVALID 0
FWU_PCH_SKU_H 1
FWU_PCH_SKU_LP 2
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuPchSku(OUT UINT32 *PchSku);
/**
@brief Get PCH SKU, from the Update Image buffer.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@param[out] PchSku PCH SKU. Caller allocated.
FWU_PCH_SKU_INVALID 0
FWU_PCH_SKU_H 1
FWU_PCH_SKU_LP 2
@return SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuPchSkuFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength,
OUT UINT32 *PchSku);
/**
@brief Get Product Segment, from the flash image.
@param[out] ProductSegment Product Segment. Caller allocated.
FWU_PRODUCT_SEGMENT_CLIENT 1
FWU_PRODUCT_SEGMENT_HEDT 2
FWU_PRODUCT_SEGMENT_WS 3
FWU_PRODUCT_SEGMENT_CONVERGED_MOBILITY 4
FWU_PRODUCT_SEGMENT_IOT 5
FWU_PRODUCT_SEGMENT_SMALL_CORE_ENTRY_LEVEL 6
@return SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuProductSegmentFromFlash(OUT UINT32 *ProductSegment);
/**
@brief Get Product Segment, from the Update Image buffer.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@param[out] ProductSegment Product Segment. Caller allocated.
FWU_PRODUCT_SEGMENT_CLIENT 1
FWU_PRODUCT_SEGMENT_HEDT 2
FWU_PRODUCT_SEGMENT_WS 3
FWU_PRODUCT_SEGMENT_CONVERGED_MOBILITY 4
FWU_PRODUCT_SEGMENT_IOT 5
FWU_PRODUCT_SEGMENT_SMALL_CORE_ENTRY_LEVEL 6
@return SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuProductSegmentFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength,
OUT UINT32 *ProductSegment);
/**
@brief Check if the Update Image, from buffer, is compatible to the Flash
Image, by comparing TCB SVN, ARB SVN, VCN of all the updatable
partitions in the Flash Image and in the Update Image.
It is not possible to update to a lower value.
Update may not be possible for other reasons, that are not checked
by this function.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@return SUCCESS If compatible. Error code otherwise.
**/
UINT32 FwuCheckCompatibilityFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength);
/**
Get version of a specific partition, from the flash image.
@param[in] PartitionId ID of partition. If the FW version of CSE is needed,
use bup partition ID: FPT_PARTITION_NAME_FTPR/FPT_PARTITION_NAME_RBEP.
@param[out] Major Major number of version. Caller allocated.
@param[out] Minor Minor number of version. Caller allocated.
@param[out] HotFix Hotfix number of version. Caller allocated.
@param[out] Build Build number of version. Caller allocated.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuPartitionVersionFromFlash(IN UINT32 PartitionId,
OUT UINT16 *Major,
OUT UINT16 *Minor,
OUT UINT16 *Hotfix,
OUT UINT16 *Build);
/**
Get version of a specific partition, from the Update Image buffer.
@param[in] Buffer Buffer of Update Image read from Update Image file.
@param[in] BufferLength Length of the buffer in bytes.
@param[in] PartitionId ID of partition. If the FW version of CSE is needed,
use bup partition ID: FPT_PARTITION_NAME_FTPR/FPT_PARTITION_NAME_RBEP.
@param[out] Major Major number of version. Caller allocated.
@param[out] Minor Minor number of version. Caller allocated.
@param[out] HotFix Hotfix number of version. Caller allocated.
@param[out] Build Build number of version. Caller allocated.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuPartitionVersionFromBuffer(IN UINT8 *Buffer,
IN UINT32 BufferLength,
IN UINT32 PartitionId,
OUT UINT16 *Major,
OUT UINT16 *Minor,
OUT UINT16 *Hotfix,
OUT UINT16 *Build);
/**
Get vendor ID of a specific partition, from the flash image.
@param[in] PartitionId ID of partition.
@param[out] VendorId Vendor ID of partition. Caller allocated.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuPartitionVendorIdFromFlash(IN UINT32 PartitionId,
OUT UINT32 *VendorId);
/**
Get the the current image from the flash - Restore Point Image, and save it to buffer.
@param[out] buffer Buffer of the saved Restore Point Image.
Allocated by the function, only in case of SUCCESS. NULL otherwise.
Caller should free the buffer
using FreePool() in EFI.
@param[out] bufferLength Length of the buffer in bytes.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuSaveRestorePointToBuffer(OUT UINT8 **buffer,
OUT UINT32 *bufferLength);
/**
Set ISH configuration file.
Receive PDT file payload, create bios2ish file as a composition of
bios2ish header (with PDT Update data type) and PDT file payload
and send it to FW to set file.
Supported only before EOP.
@param[in] Buffer Buffer of PDT file payload.
@param[in] BufferLength Length of the buffer in bytes.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuSetIshConfig(IN UINT8 *Buffer,
IN UINT32 BufferLength);
/**
Get PDT version and VDV version from ISH file INTC_pdt.
@param[out] PdtVersion PDT version. Caller allocated.
@param[out] VdvVersion VDV version. Caller allocated.
@retval SUCCESS If succeeded. Error code otherwise.
**/
UINT32 FwuGetIshPdtVersion(OUT UINT8 *PdtVersion,
OUT UINT8 *VdvVersion);
#endif // __FWUPDATELIB_H__