From b2824a8e1362b89285663e1ab9b88e9fbb4bc572 Mon Sep 17 00:00:00 2001 From: jljusten Date: Thu, 1 Sep 2011 19:57:46 +0000 Subject: IntelFrameworkModulePkg: Add UpdateDriverDxe driver Signed-off-by: jljusten Reviewed-by: rsun3 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12257 6f19259b-4bc3-4df7-8a09-765794883524 --- .../FirmwareVolume/UpdateDriverDxe/UpdateDriver.h | 218 +++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 IntelFrameworkModulePkg/Universal/FirmwareVolume/UpdateDriverDxe/UpdateDriver.h (limited to 'IntelFrameworkModulePkg/Universal/FirmwareVolume/UpdateDriverDxe/UpdateDriver.h') diff --git a/IntelFrameworkModulePkg/Universal/FirmwareVolume/UpdateDriverDxe/UpdateDriver.h b/IntelFrameworkModulePkg/Universal/FirmwareVolume/UpdateDriverDxe/UpdateDriver.h new file mode 100644 index 0000000000..9fd00b3b2d --- /dev/null +++ b/IntelFrameworkModulePkg/Universal/FirmwareVolume/UpdateDriverDxe/UpdateDriver.h @@ -0,0 +1,218 @@ +/** @file + Common defines and definitions for a component update driver. + + Copyright (c) 2002 - 2010, Intel Corporation. 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 _EFI_UPDATE_DRIVER_H_ +#define _EFI_UPDATE_DRIVER_H_ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// +// {283FA2EE-532C-484d-9383-9F93B36F0B7E} +// +#define EFI_UPDATE_DATA_FILE_GUID \ + { 0x283fa2ee, 0x532c, 0x484d, { 0x93, 0x83, 0x9f, 0x93, 0xb3, 0x6f, 0xb, 0x7e } } + +extern EFI_HII_HANDLE gHiiHandle; + +typedef enum { + UpdateWholeFV = 0, // 0, update whole FV + UpdateFvFile, // 1, update a set of FV files asynchronously + UpdateFvRange, // 2, update part of FV or flash + UpdateOperationMaximum // 3 +} UPDATE_OPERATION_TYPE; + +typedef struct { + UINTN Index; + UPDATE_OPERATION_TYPE UpdateType; + EFI_DEVICE_PATH_PROTOCOL DevicePath; + EFI_PHYSICAL_ADDRESS BaseAddress; + EFI_GUID FileGuid; + UINTN Length; + BOOLEAN FaultTolerant; +} UPDATE_CONFIG_DATA; + +typedef struct _SECTION_ITEM SECTION_ITEM; +struct _SECTION_ITEM { + CHAR8 *ptrSection; + UINTN SecNameLen; + CHAR8 *ptrEntry; + CHAR8 *ptrValue; + SECTION_ITEM *ptrNext; +}; + +typedef struct _COMMENT_LINE COMMENT_LINE; +struct _COMMENT_LINE { + CHAR8 *ptrComment; + COMMENT_LINE *ptrNext; +}; + +typedef struct { + EFI_GUID FileGuid; +} UPDATE_PRIVATE_DATA; + +#define MAX_LINE_LENGTH 512 +#define EFI_D_UPDATE EFI_D_ERROR + +#define MIN_ALIGNMENT_SIZE 4 +#define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0) + +/** + Parse Config data file to get the updated data array. + + @param DataBuffer Config raw file buffer. + @param BufferSize Size of raw buffer. + @param NumOfUpdates Pointer to the number of update data. + @param UpdateArray Pointer to the config of update data. + + @retval EFI_NOT_FOUND No config data is found. + @retval EFI_OUT_OF_RESOURCES No enough memory is allocated. + @retval EFI_SUCCESS Parse the config file successfully. + +**/ +EFI_STATUS +ParseUpdateDataFile ( + IN UINT8 *DataBuffer, + IN UINTN BufferSize, + IN OUT UINTN *NumOfUpdates, + IN OUT UPDATE_CONFIG_DATA **UpdateArray + ); + +/** + Update the whole FV image, and reinsall FVB protocol for the updated FV image. + + @param FvbHandle Handle of FVB protocol for the updated flash range. + @param FvbProtocol FVB protocol. + @param ConfigData Config data on updating driver. + @param ImageBuffer Image buffer to be updated. + @param ImageSize Image size. + + @retval EFI_INVALID_PARAMETER Update type is not UpdateWholeFV. + Or Image size is not same to the size of whole FV. + @retval EFI_OUT_OF_RESOURCES No enoug memory is allocated. + @retval EFI_SUCCESS FV image is updated, and its FVB protocol is reinstalled. + +**/ +EFI_STATUS +PerformUpdateOnWholeFv ( + IN EFI_HANDLE FvbHandle, + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbProtocol, + IN UPDATE_CONFIG_DATA *ConfigData, + IN UINT8 *ImageBuffer, + IN UINTN ImageSize + ); + +/** + Update certain file in the FV. + + @param FvbHandle Handle of FVB protocol for the updated flash range. + @param FvbProtocol FVB protocol. + @param ConfigData Config data on updating driver. + @param ImageBuffer Image buffer to be updated. + @param ImageSize Image size. + @param FileType FFS file type. + @param FileAttributes FFS file attribute + + @retval EFI_INVALID_PARAMETER Update type is not UpdateFvFile. + Or Image size is not same to the size of whole FV. + @retval EFI_UNSUPPORTED PEIM FFS is unsupported to be updated. + @retval EFI_SUCCESS The FFS file is added into FV. + +**/ +EFI_STATUS +PerformUpdateOnFvFile ( + IN EFI_HANDLE FvbHandle, + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbProtocol, + IN UPDATE_CONFIG_DATA *ConfigData, + IN UINT8 *ImageBuffer, + IN UINTN ImageSize, + IN EFI_FV_FILETYPE FileType, + IN EFI_FV_FILE_ATTRIBUTES FileAttributes + ); + +/** + Update the buffer into flash area in fault tolerant write method. + + @param ImageBuffer Image buffer to be updated. + @param SizeLeft Size of the image buffer. + @param UpdatedSize Size of the updated buffer. + @param ConfigData Config data on updating driver. + @param FlashAddress Flash address to be updated as start address. + @param FvbProtocol FVB protocol. + @param FvbHandle Handle of FVB protocol for the updated flash range. + + @retval EFI_SUCCESS Buffer data is updated into flash. + @retval EFI_INVALID_PARAMETER Base flash address is not in FVB flash area. + @retval EFI_NOT_FOUND FTW protocol doesn't exist. + @retval EFI_OUT_OF_RESOURCES No enough backup space. + @retval EFI_ABORTED Error happen when update flash area. + +**/ +EFI_STATUS +FaultTolerantUpdateOnPartFv ( + IN UINT8 *ImageBuffer, + IN UINTN SizeLeft, + IN OUT UINTN *UpdatedSize, + IN UPDATE_CONFIG_DATA *ConfigData, + IN EFI_PHYSICAL_ADDRESS FlashAddress, + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbProtocol, + IN EFI_HANDLE FvbHandle + ); + +/** + Directly update the buffer into flash area without fault tolerant write method. + + @param ImageBuffer Image buffer to be updated. + @param SizeLeft Size of the image buffer. + @param UpdatedSize Size of the updated buffer. + @param FlashAddress Flash address to be updated as start address. + @param FvbProtocol FVB protocol. + @param FvbHandle Handle of FVB protocol for the updated flash range. + + @retval EFI_SUCCESS Buffer data is updated into flash. + @retval EFI_INVALID_PARAMETER Base flash address is not in FVB flash area. + @retval EFI_OUT_OF_RESOURCES No enough backup space. + +**/ +EFI_STATUS +NonFaultTolerantUpdateOnPartFv ( + IN UINT8 *ImageBuffer, + IN UINTN SizeLeft, + IN OUT UINTN *UpdatedSize, + IN EFI_PHYSICAL_ADDRESS FlashAddress, + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbProtocol, + IN EFI_HANDLE FvbHandle + ); + +#endif -- cgit v1.2.3