Reviewed-by: Chasel Chiu <chasel.c...@intel.com>
> -----Original Message----- > From: mikub...@linux.microsoft.com <mikub...@linux.microsoft.com> > Sent: Wednesday, May 19, 2021 12:00 PM > To: devel@edk2.groups.io > Cc: Chiu, Chasel <chasel.c...@intel.com>; Desimone, Nathaniel L > <nathaniel.l.desim...@intel.com>; Liming Gao <gaolim...@byosoft.com.cn>; > Dong, Eric <eric.d...@intel.com> > Subject: [edk2-platforms][PATCH v2 25/35] MinPlatformPkg: Remove > SpiFvbService modules > > From: Michael Kubacki <michael.kuba...@microsoft.com> > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3307 > > SpiFvbServiceSmm and SpiFvbServiceStandaloneMm have moved to > IntelSiliconPkg. > > Cc: Chasel Chiu <chasel.c...@intel.com> > Cc: Nate DeSimone <nathaniel.l.desim...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Eric Dong <eric.d...@intel.com> > Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com> > --- > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c > | 94 - > - > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c > | 903 -------------------- > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c > | 271 ------ > > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneM > m.c | 32 - > > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditionalM > m.c | 32 - > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h > | 158 ---- > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h > | 22 - > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > | 68 -- > > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneM > m.inf | 67 -- > Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > | 2 - > 10 files changed, 1649 deletions(-) > > diff --git a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c > deleted file mode 100644 > index 7f2678fa9e5a..000000000000 > --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c > +++ /dev/null > @@ -1,94 +0,0 @@ > -/**@file > - Defines data structure that is the volume header found. > - These data is intent to decouple FVB driver with FV header. > - > -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> > -SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "SpiFvbServiceCommon.h" > - > -#define FIRMWARE_BLOCK_SIZE 0x10000 > -#define FVB_MEDIA_BLOCK_SIZE FIRMWARE_BLOCK_SIZE > - > -#define NV_STORAGE_BASE_ADDRESS > FixedPcdGet32(PcdFlashNvStorageVariableBase) > -#define SYSTEM_NV_BLOCK_NUM > ((FixedPcdGet32(PcdFlashNvStorageVariableSize)+ > FixedPcdGet32(PcdFlashNvStorageFtwWorkingSize) + > FixedPcdGet32(PcdFlashNvStorageFtwSpareSize))/ FVB_MEDIA_BLOCK_SIZE) > - > -typedef struct { > - EFI_PHYSICAL_ADDRESS BaseAddress; > - EFI_FIRMWARE_VOLUME_HEADER FvbInfo; > - EFI_FV_BLOCK_MAP_ENTRY End[1]; > -} EFI_FVB2_MEDIA_INFO; > - > -// > -// This data structure contains a template of all correct FV headers, which > is > used to restore > -// Fv header if it's corrupted. > -// > -EFI_FVB2_MEDIA_INFO mPlatformFvbMediaInfo[] = { > - // > - // Systen NvStorage FVB > - // > - { > - NV_STORAGE_BASE_ADDRESS, > - { > - {0,}, //ZeroVector[16] > - EFI_SYSTEM_NV_DATA_FV_GUID, > - FVB_MEDIA_BLOCK_SIZE * SYSTEM_NV_BLOCK_NUM, > - EFI_FVH_SIGNATURE, > - 0x0004feff, // check MdePkg/Include/Pi/PiFirmwareVolume.h for details > on > EFI_FVB_ATTRIBUTES_2 > - sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof > (EFI_FV_BLOCK_MAP_ENTRY), > - 0, //CheckSum which will be calucated dynamically. > - 0, //ExtHeaderOffset > - {0,}, //Reserved[1] > - 2, //Revision > - { > - { > - SYSTEM_NV_BLOCK_NUM, > - FVB_MEDIA_BLOCK_SIZE, > - } > - } > - }, > - { > - { > - 0, > - 0 > - } > - } > - } > -}; > - > -EFI_STATUS > -GetFvbInfo ( > - IN EFI_PHYSICAL_ADDRESS FvBaseAddress, > - OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo > - ) > -{ > - UINTN Index; > - EFI_FIRMWARE_VOLUME_HEADER *FvHeader; > - > - for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof > (EFI_FVB2_MEDIA_INFO); Index++) { > - if (mPlatformFvbMediaInfo[Index].BaseAddress == FvBaseAddress) { > - FvHeader = &mPlatformFvbMediaInfo[Index].FvbInfo; > - > - // > - // Update the checksum value of FV header. > - // > - FvHeader->Checksum = CalculateCheckSum16 ( (UINT16 *) FvHeader, > FvHeader->HeaderLength); > - > - *FvbInfo = FvHeader; > - > - DEBUG ((DEBUG_INFO, "BaseAddr: 0x%lx \n", FvBaseAddress)); > - DEBUG ((DEBUG_INFO, "FvLength: 0x%lx \n", (*FvbInfo)->FvLength)); > - DEBUG ((DEBUG_INFO, "HeaderLength: 0x%x \n", (*FvbInfo)- > >HeaderLength)); > - DEBUG ((DEBUG_INFO, "Header Checksum: 0x%X\n", (*FvbInfo)- > >Checksum)); > - DEBUG ((DEBUG_INFO, "FvBlockMap[0].NumBlocks: 0x%x \n", (*FvbInfo)- > >BlockMap[0].NumBlocks)); > - DEBUG ((DEBUG_INFO, "FvBlockMap[0].BlockLength: 0x%x \n", (*FvbInfo)- > >BlockMap[0].Length)); > - DEBUG ((DEBUG_INFO, "FvBlockMap[1].NumBlocks: 0x%x \n", (*FvbInfo)- > >BlockMap[1].NumBlocks)); > - DEBUG ((DEBUG_INFO, "FvBlockMap[1].BlockLength: 0x%x \n\n", > (*FvbInfo)->BlockMap[1].Length)); > - > - return EFI_SUCCESS; > - } > - } > - return EFI_NOT_FOUND; > -} > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c > deleted file mode 100644 > index 113c749d04ff..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c > +++ /dev/null > @@ -1,903 +0,0 @@ > -/** @file > - Common driver source for several Serial Flash devices > - which are compliant with the Intel(R) Serial Flash Interface Compatibility > Specification. > - > -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> > -SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "SpiFvbServiceCommon.h" > - > -// > -// Global variable for this FVB driver which contains > -// the private data of all firmware volume block instances > -// > -FVB_GLOBAL mFvbModuleGlobal; > - > -// > -// This platform driver knows there are multiple FVs on FD. > -// Now we only provide FVs on Variable region and MicorCode region for > performance issue. > -// > -FV_INFO mPlatformFvBaseAddress[] = { > - {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase), > FixedPcdGet32(PcdFlashNvStorageVariableSize)}, > - {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase), > FixedPcdGet32(PcdFlashFvMicrocodeSize)}, > - {0, 0} > -}; > - > -FV_INFO mPlatformDefaultBaseAddress[] = { > - {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase), > FixedPcdGet32(PcdFlashNvStorageVariableSize)}, > - {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase), > FixedPcdGet32(PcdFlashFvMicrocodeSize)}, > - {0, 0} > -}; > - > -FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = { > - { > - { > - HARDWARE_DEVICE_PATH, > - HW_MEMMAP_DP, > - { > - (UINT8)(sizeof (MEMMAP_DEVICE_PATH)), > - (UINT8)(sizeof (MEMMAP_DEVICE_PATH) >> 8) > - } > - }, > - EfiMemoryMappedIO, > - (EFI_PHYSICAL_ADDRESS) 0, > - (EFI_PHYSICAL_ADDRESS) 0, > - }, > - { > - END_DEVICE_PATH_TYPE, > - END_ENTIRE_DEVICE_PATH_SUBTYPE, > - { > - END_DEVICE_PATH_LENGTH, > - 0 > - } > - } > -}; > - > -FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = { > - { > - { > - MEDIA_DEVICE_PATH, > - MEDIA_PIWG_FW_VOL_DP, > - { > - (UINT8)(sizeof (MEDIA_FW_VOL_DEVICE_PATH)), > - (UINT8)(sizeof (MEDIA_FW_VOL_DEVICE_PATH) >> 8) > - } > - }, > - { 0 } > - }, > - { > - END_DEVICE_PATH_TYPE, > - END_ENTIRE_DEVICE_PATH_SUBTYPE, > - { > - END_DEVICE_PATH_LENGTH, > - 0 > - } > - } > -}; > - > -// > -// Template structure used when installing FVB protocol > -// > -EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL mFvbProtocolTemplate = { > - FvbProtocolGetAttributes, > - FvbProtocolSetAttributes, > - FvbProtocolGetPhysicalAddress, > - FvbProtocolGetBlockSize, > - FvbProtocolRead, > - FvbProtocolWrite, > - FvbProtocolEraseBlocks, > - NULL > -}; > - > -/** > - Get the EFI_FVB_ATTRIBUTES_2 of a FV. > - > - @param[in] FvbInstance The pointer to the EFI_FVB_INSTANCE. > - > - @return Attributes of the FV identified by FvbInstance. > - > -**/ > -EFI_FVB_ATTRIBUTES_2 > -FvbGetVolumeAttributes ( > - IN EFI_FVB_INSTANCE *FvbInstance > - ) > -{ > - return FvbInstance->FvHeader.Attributes; > -} > - > -/** > - Retrieves the starting address of an LBA in an FV. It also > - return a few other attribut of the FV. > - > - @param[in] FvbInstance The pointer to the EFI_FVB_INSTANCE. > - @param[in] Lba The logical block address > - @param[out] LbaAddress On output, contains the physical starting > address > - of the Lba > - @param[out] LbaLength On output, contains the length of the block > - @param[out] NumOfBlocks A pointer to a caller allocated UINTN in which > the > - number of consecutive blocks starting with Lba > is > - returned. All blocks in this range have a size > of > - BlockSize > - > - @retval EFI_SUCCESS Successfully returns > - @retval EFI_INVALID_PARAMETER Instance not found > - > -**/ > -EFI_STATUS > -FvbGetLbaAddress ( > - IN EFI_FVB_INSTANCE *FvbInstance, > - IN EFI_LBA Lba, > - OUT UINTN *LbaAddress, > - OUT UINTN *LbaLength, > - OUT UINTN *NumOfBlocks > - ) > -{ > - UINT32 NumBlocks; > - UINT32 BlockLength; > - UINTN Offset; > - EFI_LBA StartLba; > - EFI_LBA NextLba; > - EFI_FV_BLOCK_MAP_ENTRY *BlockMap; > - > - StartLba = 0; > - Offset = 0; > - BlockMap = &(FvbInstance->FvHeader.BlockMap[0]); > - > - // > - // Parse the blockmap of the FV to find which map entry the Lba belongs to > - // > - while (TRUE) { > - NumBlocks = BlockMap->NumBlocks; > - BlockLength = BlockMap->Length; > - > - if ( NumBlocks == 0 || BlockLength == 0) { > - return EFI_INVALID_PARAMETER; > - } > - > - NextLba = StartLba + NumBlocks; > - > - // > - // The map entry found > - // > - if (Lba >= StartLba && Lba < NextLba) { > - Offset = Offset + (UINTN)MultU64x32((Lba - StartLba), BlockLength); > - if (LbaAddress ) { > - *LbaAddress = FvbInstance->FvBase + Offset; > - } > - > - if (LbaLength ) { > - *LbaLength = BlockLength; > - } > - > - if (NumOfBlocks ) { > - *NumOfBlocks = (UINTN)(NextLba - Lba); > - } > - return EFI_SUCCESS; > - } > - > - StartLba = NextLba; > - Offset = Offset + NumBlocks * BlockLength; > - BlockMap++; > - } > -} > - > -/** > - Reads specified number of bytes into a buffer from the specified block. > - > - @param[in] FvbInstance The pointer to the EFI_FVB_INSTANCE > - @param[in] Lba The logical block address to be read > from > - @param[in] BlockOffset Offset into the block at which to > begin > reading > - @param[in] NumBytes Pointer that on input contains the > total size > of > - the buffer. On output, it contains > the total number > - of bytes read > - @param[in] Buffer Pointer to a caller allocated buffer > that will be > - used to hold the data read > - > - > - @retval EFI_SUCCESS The firmware volume was read > successfully > and > - contents are in Buffer > - @retval EFI_BAD_BUFFER_SIZE Read attempted across a LBA boundary. > On output, > - NumBytes contains the total number > of bytes returned > - in Buffer > - @retval EFI_ACCESS_DENIED The firmware volume is in the > ReadDisabled state > - @retval EFI_DEVICE_ERROR The block device is not functioning > correctly and > - could not be read > - @retval EFI_INVALID_PARAMETER Instance not found, or NumBytes, > Buffer are NULL > - > -**/ > -EFI_STATUS > -FvbReadBlock ( > - IN EFI_FVB_INSTANCE *FvbInstance, > - IN EFI_LBA Lba, > - IN UINTN BlockOffset, > - IN OUT UINTN *NumBytes, > - IN UINT8 *Buffer > - ) > -{ > - EFI_FVB_ATTRIBUTES_2 Attributes; > - UINTN LbaAddress; > - UINTN LbaLength; > - EFI_STATUS Status; > - BOOLEAN BadBufferSize = FALSE; > - > - if ((NumBytes == NULL) || (Buffer == NULL)) { > - return EFI_INVALID_PARAMETER; > - } > - if (*NumBytes == 0) { > - return EFI_INVALID_PARAMETER; > - } > - > - Status = FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength, > NULL); > - if (EFI_ERROR(Status)) { > - return Status; > - } > - > - Attributes = FvbGetVolumeAttributes (FvbInstance); > - > - if ((Attributes & EFI_FVB2_READ_STATUS) == 0) { > - return EFI_ACCESS_DENIED; > - } > - > - if (BlockOffset > LbaLength) { > - return EFI_INVALID_PARAMETER; > - } > - > - if (LbaLength < (*NumBytes + BlockOffset)) { > - DEBUG ((DEBUG_INFO, > - "FvReadBlock: Reducing Numbytes from 0x%x to 0x%x\n", > - *NumBytes, > - (UINT32)(LbaLength - BlockOffset)) > - ); > - *NumBytes = (UINT32) (LbaLength - BlockOffset); > - BadBufferSize = TRUE; > - } > - > - Status = SpiFlashRead (LbaAddress + BlockOffset, (UINT32 *)NumBytes, > Buffer); > - > - if (!EFI_ERROR (Status) && BadBufferSize) { > - return EFI_BAD_BUFFER_SIZE; > - } else { > - return Status; > - } > -} > - > -/** > - Writes specified number of bytes from the input buffer to the block. > - > - @param[in] FvbInstance The pointer to the EFI_FVB_INSTANCE > - @param[in] Lba The starting logical block index to > write to > - @param[in] BlockOffset Offset into the block at which to begin > writing > - @param[in] NumBytes Pointer that on input contains the total > size of > - the buffer. On output, it contains the > total number > - of bytes actually written > - @param[in] Buffer Pointer to a caller allocated buffer > that contains > - the source for the write > - @retval EFI_SUCCESS The firmware volume was written > successfully > - @retval EFI_BAD_BUFFER_SIZE Write attempted across a LBA boundary. > On output, > - NumBytes contains the total number of > bytes > - actually written > - @retval EFI_ACCESS_DENIED The firmware volume is in the > WriteDisabled > state > - @retval EFI_DEVICE_ERROR The block device is not functioning > correctly > and > - could not be written > - @retval EFI_INVALID_PARAMETER Instance not found, or NumBytes, Buffer > are NULL > - > -**/ > -EFI_STATUS > -FvbWriteBlock ( > - IN EFI_FVB_INSTANCE *FvbInstance, > - IN EFI_LBA Lba, > - IN UINTN BlockOffset, > - IN OUT UINTN *NumBytes, > - IN UINT8 *Buffer > - ) > -{ > - EFI_FVB_ATTRIBUTES_2 Attributes; > - UINTN LbaAddress; > - UINTN LbaLength; > - EFI_STATUS Status; > - BOOLEAN BadBufferSize = FALSE; > - > - if ((NumBytes == NULL) || (Buffer == NULL)) { > - return EFI_INVALID_PARAMETER; > - } > - if (*NumBytes == 0) { > - return EFI_INVALID_PARAMETER; > - } > - > - Status = FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength, > NULL); > - if (EFI_ERROR(Status)) { > - return Status; > - } > - > - // > - // Check if the FV is write enabled > - // > - Attributes = FvbGetVolumeAttributes (FvbInstance); > - if ((Attributes & EFI_FVB2_WRITE_STATUS) == 0) { > - return EFI_ACCESS_DENIED; > - } > - > - // > - // Perform boundary checks and adjust NumBytes > - // > - if (BlockOffset > LbaLength) { > - return EFI_INVALID_PARAMETER; > - } > - > - if (LbaLength < (*NumBytes + BlockOffset)) { > - DEBUG ((DEBUG_INFO, > - "FvWriteBlock: Reducing Numbytes from 0x%x to 0x%x\n", > - *NumBytes, > - (UINT32)(LbaLength - BlockOffset)) > - ); > - *NumBytes = (UINT32) (LbaLength - BlockOffset); > - BadBufferSize = TRUE; > - } > - > - Status = SpiFlashWrite (LbaAddress + BlockOffset, (UINT32 *)NumBytes, > Buffer); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - Status = SpiFlashLock (); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - WriteBackInvalidateDataCacheRange ((VOID *) (LbaAddress + BlockOffset), > *NumBytes); > - > - if (!EFI_ERROR (Status) && BadBufferSize) { > - return EFI_BAD_BUFFER_SIZE; > - } else { > - return Status; > - } > -} > - > - > - > -/** > - Erases and initializes a firmware volume block. > - > - @param[in] FvbInstance The pointer to the EFI_FVB_INSTANCE > - @param[in] Lba The logical block index to be erased > - > - @retval EFI_SUCCESS The erase request was successfully > completed > - @retval EFI_ACCESS_DENIED The firmware volume is in the WriteDisabled > state > - @retval EFI_DEVICE_ERROR The block device is not functioning > correctly > and > - could not be written. Firmware device may > have been > - partially erased > - @retval EFI_INVALID_PARAMETER Instance not found > - > -**/ > -EFI_STATUS > -FvbEraseBlock ( > - IN EFI_FVB_INSTANCE *FvbInstance, > - IN EFI_LBA Lba > - ) > -{ > - > - EFI_FVB_ATTRIBUTES_2 Attributes; > - UINTN LbaAddress; > - UINTN LbaLength; > - EFI_STATUS Status; > - > - // > - // Check if the FV is write enabled > - // > - Attributes = FvbGetVolumeAttributes (FvbInstance); > - > - if( (Attributes & EFI_FVB2_WRITE_STATUS) == 0) { > - return EFI_ACCESS_DENIED; > - } > - > - // > - // Get the starting address of the block for erase. > - // > - Status = FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength, > NULL); > - if (EFI_ERROR(Status)) { > - return Status; > - } > - > - Status = SpiFlashBlockErase (LbaAddress, &LbaLength); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - Status = SpiFlashLock (); > - if (EFI_ERROR (Status)) { > - return Status; > - } > - > - WriteBackInvalidateDataCacheRange ((VOID *) LbaAddress, LbaLength); > - > - return Status; > -} > - > -/** > - Modifies the current settings of the firmware volume according to the > - input parameter, and returns the new setting of the volume > - > - @param[in] FvbInstance The pointer to the EFI_FVB_INSTANCE. > - @param[in] Attributes On input, it is a pointer to > EFI_FVB_ATTRIBUTES_2 > - containing the desired firmware volume > settings. > - On successful return, it contains the > new settings > - of the firmware volume > - > - @retval EFI_SUCCESS Successfully returns > - @retval EFI_ACCESS_DENIED The volume setting is locked and cannot > be > modified > - @retval EFI_INVALID_PARAMETER Instance not found, or The attributes > requested are > - in conflict with the capabilities as > declared in the > - firmware volume header > - > -**/ > -EFI_STATUS > -FvbSetVolumeAttributes ( > - IN EFI_FVB_INSTANCE *FvbInstance, > - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes > - ) > -{ > - EFI_FVB_ATTRIBUTES_2 OldAttributes; > - EFI_FVB_ATTRIBUTES_2 *AttribPtr; > - EFI_FVB_ATTRIBUTES_2 UnchangedAttributes; > - UINT32 Capabilities; > - UINT32 OldStatus, NewStatus; > - > - AttribPtr = (EFI_FVB_ATTRIBUTES_2 *) > &(FvbInstance->FvHeader.Attributes); > - OldAttributes = *AttribPtr; > - Capabilities = OldAttributes & EFI_FVB2_CAPABILITIES; > - OldStatus = OldAttributes & EFI_FVB2_STATUS; > - NewStatus = *Attributes & EFI_FVB2_STATUS; > - > - UnchangedAttributes = EFI_FVB2_READ_DISABLED_CAP | \ > - EFI_FVB2_READ_ENABLED_CAP | \ > - EFI_FVB2_WRITE_DISABLED_CAP | \ > - EFI_FVB2_WRITE_ENABLED_CAP | \ > - EFI_FVB2_LOCK_CAP | \ > - EFI_FVB2_STICKY_WRITE | \ > - EFI_FVB2_MEMORY_MAPPED | \ > - EFI_FVB2_ERASE_POLARITY | \ > - EFI_FVB2_READ_LOCK_CAP | \ > - EFI_FVB2_WRITE_LOCK_CAP | \ > - EFI_FVB2_ALIGNMENT; > - > - // > - // Some attributes of FV is read only can *not* be set > - // > - if ((OldAttributes & UnchangedAttributes) ^ (*Attributes & > UnchangedAttributes)) { > - return EFI_INVALID_PARAMETER; > - } > - > - // > - // If firmware volume is locked, no status bit can be updated > - // > - if ( OldAttributes & EFI_FVB2_LOCK_STATUS ) { > - if ( OldStatus ^ NewStatus ) { > - return EFI_ACCESS_DENIED; > - } > - } > - > - // > - // Test read disable > - // > - if ((Capabilities & EFI_FVB2_READ_DISABLED_CAP) == 0) { > - if ((NewStatus & EFI_FVB2_READ_STATUS) == 0) { > - return EFI_INVALID_PARAMETER; > - } > - } > - > - // > - // Test read enable > - // > - if ((Capabilities & EFI_FVB2_READ_ENABLED_CAP) == 0) { > - if (NewStatus & EFI_FVB2_READ_STATUS) { > - return EFI_INVALID_PARAMETER; > - } > - } > - > - // > - // Test write disable > - // > - if ((Capabilities & EFI_FVB2_WRITE_DISABLED_CAP) == 0) { > - if ((NewStatus & EFI_FVB2_WRITE_STATUS) == 0) { > - return EFI_INVALID_PARAMETER; > - } > - } > - > - // > - // Test write enable > - // > - if ((Capabilities & EFI_FVB2_WRITE_ENABLED_CAP) == 0) { > - if (NewStatus & EFI_FVB2_WRITE_STATUS) { > - return EFI_INVALID_PARAMETER; > - } > - } > - > - // > - // Test lock > - // > - if ((Capabilities & EFI_FVB2_LOCK_CAP) == 0) { > - if (NewStatus & EFI_FVB2_LOCK_STATUS) { > - return EFI_INVALID_PARAMETER; > - } > - } > - > - *AttribPtr = (*AttribPtr) & (0xFFFFFFFF & (~EFI_FVB2_STATUS)); > - *AttribPtr = (*AttribPtr) | NewStatus; > - *Attributes = *AttribPtr; > - > - return EFI_SUCCESS; > -} > - > -/** > - Check the integrity of firmware volume header > - > - @param[in] FvHeader A pointer to a firmware volume header > - > - @retval TRUE The firmware volume is consistent > - @retval FALSE The firmware volume has corrupted. > - > -**/ > -BOOLEAN > -IsFvHeaderValid ( > - IN EFI_PHYSICAL_ADDRESS FvBase, > - IN CONST EFI_FIRMWARE_VOLUME_HEADER *FvHeader > - ) > -{ > - if (FvBase == PcdGet32(PcdFlashNvStorageVariableBase)) { > - if (CompareMem (&FvHeader->FileSystemGuid, &gEfiSystemNvDataFvGuid, > sizeof(EFI_GUID)) != 0 ) { > - return FALSE; > - } > - } else { > - if (CompareMem (&FvHeader->FileSystemGuid, > &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) { > - return FALSE; > - } > - } > - if ( (FvHeader->Revision != EFI_FVH_REVISION) || > - (FvHeader->Signature != EFI_FVH_SIGNATURE) || > - (FvHeader->FvLength == ((UINTN) -1)) || > - ((FvHeader->HeaderLength & 0x01 ) !=0) ) { > - return FALSE; > - } > - > - if (CalculateCheckSum16 ((UINT16 *) FvHeader, FvHeader->HeaderLength) != 0) > { > - return FALSE; > - } > - > - return TRUE; > -} > - > -// > -// FVB protocol APIs > -// > - > -/** > - Retrieves the physical address of the device. > - > - @param[in] This A pointer to EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL. > - @param[out] Address Output buffer containing the address. > - > - retval EFI_SUCCESS The function always return successfully. > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolGetPhysicalAddress ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - OUT EFI_PHYSICAL_ADDRESS *Address > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - > - *Address = FvbInstance->FvBase; > - > - return EFI_SUCCESS; > -} > - > -/** > - Retrieve the size of a logical block > - > - @param[in] This Calling context > - @param[in] Lba Indicates which block to return the size for. > - @param[out] BlockSize A pointer to a caller allocated UINTN in which > - the size of the block is returned > - @param[out] NumOfBlocks A pointer to a caller allocated UINTN in which the > - number of consecutive blocks starting with Lba is > - returned. All blocks in this range have a size of > - BlockSize > - > - @retval EFI_SUCCESS The function always return successfully. > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolGetBlockSize ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN EFI_LBA Lba, > - OUT UINTN *BlockSize, > - OUT UINTN *NumOfBlocks > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - > - DEBUG((DEBUG_INFO, > - "FvbProtocolGetBlockSize: Lba: 0x%lx BlockSize: 0x%x NumOfBlocks: > 0x%x\n", > - Lba, > - BlockSize, > - NumOfBlocks) > - ); > - > - return FvbGetLbaAddress ( > - FvbInstance, > - Lba, > - NULL, > - BlockSize, > - NumOfBlocks > - ); > -} > - > -/** > - Retrieves Volume attributes. No polarity translations are done. > - > - @param[in] This Calling context > - @param[out] Attributes Output buffer which contains attributes > - > - @retval EFI_SUCCESS The function always return successfully. > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolGetAttributes ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - OUT EFI_FVB_ATTRIBUTES_2 *Attributes > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - > - *Attributes = FvbGetVolumeAttributes (FvbInstance); > - > - DEBUG ((DEBUG_INFO, > - "FvbProtocolGetAttributes: This: 0x%x Attributes: 0x%x\n", > - This, > - *Attributes) > - ); > - > - return EFI_SUCCESS; > -} > - > -/** > - Sets Volume attributes. No polarity translations are done. > - > - @param[in] This Calling context > - @param[out] Attributes Output buffer which contains attributes > - > - @retval EFI_SUCCESS The function always return successfully. > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolSetAttributes ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes > - ) > -{ > - EFI_STATUS Status; > - EFI_FVB_INSTANCE *FvbInstance; > - > - DEBUG((DEBUG_INFO, > - "FvbProtocolSetAttributes: Before SET - This: 0x%x Attributes: 0x%x\n", > - This, > - *Attributes) > - ); > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - > - Status = FvbSetVolumeAttributes (FvbInstance, Attributes); > - > - DEBUG((DEBUG_INFO, > - "FvbProtocolSetAttributes: After SET - This: 0x%x Attributes: 0x%x\n", > - This, > - *Attributes) > - ); > - > - return Status; > -} > - > -/** > - The EraseBlock() function erases one or more blocks as denoted by the > - variable argument list. The entire parameter list of blocks must be > verified > - prior to erasing any blocks. If a block is requested that does not exist > - within the associated firmware volume (it has a larger index than the last > - block of the firmware volume), the EraseBlock() function must return > - EFI_INVALID_PARAMETER without modifying the contents of the firmware > volume. > - > - @param[in] This Calling context > - @param[in] ... Starting LBA followed by Number of Lba to erase. > - a -1 to terminate the list. > - > - @retval EFI_SUCCESS The erase request was successfully completed > - @retval EFI_ACCESS_DENIED The firmware volume is in the WriteDisabled > state > - @retval EFI_DEVICE_ERROR The block device is not functioning correctly and > - could not be written. Firmware device may have > been > - partially erased > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolEraseBlocks ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - ... > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - UINTN NumOfBlocks; > - VA_LIST Args; > - EFI_LBA StartingLba; > - UINTN NumOfLba; > - EFI_STATUS Status; > - > - DEBUG((DEBUG_INFO, "FvbProtocolEraseBlocks: \n")); > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - > - NumOfBlocks = FvbInstance->NumOfBlocks; > - > - VA_START (Args, This); > - > - do { > - StartingLba = VA_ARG (Args, EFI_LBA); > - if ( StartingLba == EFI_LBA_LIST_TERMINATOR ) { > - break; > - } > - > - NumOfLba = VA_ARG (Args, UINT32); > - > - // > - // Check input parameters > - // > - if (NumOfLba == 0) { > - VA_END (Args); > - return EFI_INVALID_PARAMETER; > - } > - > - if ( ( StartingLba + NumOfLba ) > NumOfBlocks ) { > - return EFI_INVALID_PARAMETER; > - } > - } while ( 1 ); > - > - VA_END (Args); > - > - VA_START (Args, This); > - do { > - StartingLba = VA_ARG (Args, EFI_LBA); > - if (StartingLba == EFI_LBA_LIST_TERMINATOR) { > - break; > - } > - > - NumOfLba = VA_ARG (Args, UINT32); > - > - while ( NumOfLba > 0 ) { > - Status = FvbEraseBlock (FvbInstance, StartingLba); > - if ( EFI_ERROR(Status)) { > - VA_END (Args); > - return Status; > - } > - StartingLba ++; > - NumOfLba --; > - } > - > - } while ( 1 ); > - > - VA_END (Args); > - > - return EFI_SUCCESS; > -} > - > -/** > - Writes data beginning at Lba:Offset from FV. The write terminates either > - when *NumBytes of data have been written, or when a block boundary is > - reached. *NumBytes is updated to reflect the actual number of bytes > - written. The write opertion does not include erase. This routine will > - attempt to write only the specified bytes. If the writes do not stick, > - it will return an error. > - > - @param[in] This Calling context > - @param[in] Lba Block in which to begin write > - @param[in] Offset Offset in the block at which to begin write > - @param[in,out] NumBytes On input, indicates the requested write size. On > - output, indicates the actual number of bytes > written > - @param[in] Buffer Buffer containing source data for the write. > - > - @retval EFI_SUCCESS The firmware volume was written successfully > - @retval EFI_BAD_BUFFER_SIZE Write attempted across a LBA boundary. On > output, > - NumBytes contains the total number of bytes > - actually written > - @retval EFI_ACCESS_DENIED The firmware volume is in the WriteDisabled > state > - @retval EFI_DEVICE_ERROR The block device is not functioning correctly > and > - could not be written > - @retval EFI_INVALID_PARAMETER NumBytes or Buffer are NULL > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolWrite ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN EFI_LBA Lba, > - IN UINTN Offset, > - IN OUT UINTN *NumBytes, > - IN UINT8 *Buffer > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - > - DEBUG((DEBUG_INFO, > - "FvbProtocolWrite: Lba: 0x%lx Offset: 0x%x NumBytes: 0x%x, Buffer: > 0x%x\n", > - Lba, > - Offset, > - *NumBytes, > - Buffer) > - ); > - > - return FvbWriteBlock (FvbInstance, Lba, Offset, NumBytes, Buffer); > -} > - > -/** > - Reads data beginning at Lba:Offset from FV. The Read terminates either > - when *NumBytes of data have been read, or when a block boundary is > - reached. *NumBytes is updated to reflect the actual number of bytes > - written. The write opertion does not include erase. This routine will > - attempt to write only the specified bytes. If the writes do not stick, > - it will return an error. > - > - @param[in] This Calling context > - @param[in] Lba Block in which to begin write > - @param[in] Offset Offset in the block at which to begin write > - @param[in,out] NumBytes On input, indicates the requested write size. On > - output, indicates the actual number of bytes > written > - @param[in] Buffer Buffer containing source data for the write. > - > - @retval EFI_SUCCESS The firmware volume was read successfully and > - contents are in Buffer > - @retval EFI_BAD_BUFFER_SIZE Read attempted across a LBA boundary. On > output, > - NumBytes contains the total number of bytes > returned > - in Buffer > - @retval EFI_ACCESS_DENIED The firmware volume is in the ReadDisabled > state > - @retval EFI_DEVICE_ERROR The block device is not functioning correctly > and > - could not be read > - @retval EFI_INVALID_PARAMETER NumBytes or Buffer are NULL > - > -**/ > -EFI_STATUS > -EFIAPI > -FvbProtocolRead ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN EFI_LBA Lba, > - IN UINTN Offset, > - IN OUT UINTN *NumBytes, > - OUT UINT8 *Buffer > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - EFI_STATUS Status; > - > - FvbInstance = FVB_INSTANCE_FROM_THIS (This); > - Status = FvbReadBlock (FvbInstance, Lba, Offset, NumBytes, Buffer); > - DEBUG((DEBUG_INFO, > - "FvbProtocolRead: Lba: 0x%lx Offset: 0x%x NumBytes: 0x%x, Buffer: > 0x%x\n", > - Lba, > - Offset, > - *NumBytes, > - Buffer) > - ); > - > - return Status; > -} > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c > deleted file mode 100644 > index 016f19587c91..000000000000 > --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c > +++ /dev/null > @@ -1,271 +0,0 @@ > -/** @file > - MM driver source for several Serial Flash devices > - which are compliant with the Intel(R) Serial Flash Interface Compatibility > Specification. > - > - Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> > - Copyright (c) Microsoft Corporation.<BR> > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "SpiFvbServiceCommon.h" > -#include <Library/MmServicesTableLib.h> > -#include <Library/UefiDriverEntryPoint.h> > -#include <Protocol/SmmFirmwareVolumeBlock.h> > - > -/** > - The function installs EFI_FIRMWARE_VOLUME_BLOCK protocol > - for each FV in the system. > - > - @param[in] FvbInstance The pointer to a FW volume instance structure, > - which contains the information about one FV. > - > - @retval VOID > - > -**/ > -VOID > -InstallFvbProtocol ( > - IN EFI_FVB_INSTANCE *FvbInstance > - ) > -{ > - EFI_FIRMWARE_VOLUME_HEADER *FvHeader; > - EFI_STATUS Status; > - EFI_HANDLE FvbHandle; > - > - ASSERT (FvbInstance != NULL); > - if (FvbInstance == NULL) { > - return; > - } > - > - CopyMem (&FvbInstance->FvbProtocol, &mFvbProtocolTemplate, sizeof > (EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL)); > - > - FvHeader = &FvbInstance->FvHeader; > - if (FvHeader == NULL) { > - return; > - } > - > - // > - // Set up the devicepath > - // > - DEBUG ((DEBUG_INFO, "FwBlockService.c: Setting up DevicePath for > 0x%lx:\n", FvbInstance->FvBase)); > - if (FvHeader->ExtHeaderOffset == 0) { > - // > - // FV does not contains extension header, then produce > MEMMAP_DEVICE_PATH > - // > - FvbInstance->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) > AllocateRuntimeCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH), > &mFvMemmapDevicePathTemplate); > - if (FvbInstance->DevicePath == NULL) { > - DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for > MEMMAP_DEVICE_PATH failed\n")); > - return; > - } > - ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)- > >MemMapDevPath.StartingAddress = FvbInstance->FvBase; > - ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)- > >MemMapDevPath.EndingAddress = FvbInstance->FvBase + FvHeader- > >FvLength - 1; > - } else { > - FvbInstance->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) > AllocateRuntimeCopyPool (sizeof (FV_PIWG_DEVICE_PATH), > &mFvPIWGDevicePathTemplate); > - if (FvbInstance->DevicePath == NULL) { > - DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for > FV_PIWG_DEVICE_PATH failed\n")); > - return; > - } > - CopyGuid ( > - &((FV_PIWG_DEVICE_PATH *)FvbInstance->DevicePath)- > >FvDevPath.FvName, > - (GUID *)(UINTN)(FvbInstance->FvBase + FvHeader->ExtHeaderOffset) > - ); > - } > - > - // > - // LocateDevicePath fails so install a new interface and device path > - // > - FvbHandle = NULL; > - > - Status = gMmst->MmInstallProtocolInterface ( > - &FvbHandle, > - &gEfiSmmFirmwareVolumeBlockProtocolGuid, > - EFI_NATIVE_INTERFACE, > - &(FvbInstance->FvbProtocol) > - ); > - ASSERT_EFI_ERROR (Status); > - > - Status = gMmst->MmInstallProtocolInterface ( > - &FvbHandle, > - &gEfiDevicePathProtocolGuid, > - EFI_NATIVE_INTERFACE, > - &(FvbInstance->DevicePath) > - ); > - ASSERT_EFI_ERROR (Status); > -} > - > -/** > - The function does the necessary initialization work for > - Firmware Volume Block Driver. > - > -**/ > -VOID > -FvbInitialize ( > - VOID > - ) > -{ > - EFI_FVB_INSTANCE *FvbInstance; > - EFI_FIRMWARE_VOLUME_HEADER *FvHeader; > - EFI_FV_BLOCK_MAP_ENTRY *PtrBlockMapEntry; > - EFI_PHYSICAL_ADDRESS BaseAddress; > - EFI_STATUS Status; > - UINTN BufferSize; > - UINTN Idx; > - UINT32 MaxLbaSize; > - UINT32 BytesWritten; > - UINTN BytesErased; > - > - mPlatformFvBaseAddress[0].FvBase = > PcdGet32(PcdFlashNvStorageVariableBase); > - mPlatformFvBaseAddress[0].FvSize = > PcdGet32(PcdFlashNvStorageVariableSize); > - mPlatformFvBaseAddress[1].FvBase = PcdGet32(PcdFlashFvMicrocodeBase); > - mPlatformFvBaseAddress[1].FvSize = PcdGet32(PcdFlashFvMicrocodeSize); > - mPlatformDefaultBaseAddress[0].FvBase = > PcdGet32(PcdFlashNvStorageVariableBase); > - mPlatformDefaultBaseAddress[0].FvSize = > PcdGet32(PcdFlashNvStorageVariableSize); > - mPlatformDefaultBaseAddress[1].FvBase = > PcdGet32(PcdFlashFvMicrocodeBase); > - mPlatformDefaultBaseAddress[1].FvSize = > PcdGet32(PcdFlashFvMicrocodeSize); > - > - // > - // We will only continue with FVB installation if the > - // SPI is the active BIOS state > - // > - { > - // > - // Make sure all FVB are valid and/or fix if possible > - // > - for (Idx = 0;; Idx++) { > - if (mPlatformFvBaseAddress[Idx].FvSize == 0 && > mPlatformFvBaseAddress[Idx].FvBase == 0) { > - break; > - } > - > - BaseAddress = mPlatformFvBaseAddress[Idx].FvBase; > - FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; > - > - if (!IsFvHeaderValid (BaseAddress, FvHeader)) { > - BytesWritten = 0; > - BytesErased = 0; > - DEBUG ((DEBUG_ERROR, "ERROR - The FV in 0x%x is invalid!\n", > FvHeader)); > - Status = GetFvbInfo (BaseAddress, &FvHeader); > - if (EFI_ERROR (Status)) { > - DEBUG ((DEBUG_WARN, "ERROR - Can't recovery FV header at 0x%x. > GetFvbInfo Status %r\n", BaseAddress, Status)); > - continue; > - } > - DEBUG ((DEBUG_INFO, "Rewriting FV header at 0x%X with static data\n", > BaseAddress)); > - // > - // Spi erase > - // > - BytesErased = (UINTN) FvHeader->BlockMap->Length; > - Status = SpiFlashBlockErase( (UINTN) BaseAddress, &BytesErased); > - if (EFI_ERROR (Status)) { > - DEBUG ((DEBUG_WARN, "ERROR - SpiFlashBlockErase Error %r\n", > Status)); > - continue; > - } > - if (BytesErased != FvHeader->BlockMap->Length) { > - DEBUG ((DEBUG_WARN, "ERROR - BytesErased != FvHeader->BlockMap- > >Length\n")); > - DEBUG ((DEBUG_INFO, " BytesErased = 0x%X\n Length = 0x%X\n", > BytesErased, FvHeader->BlockMap->Length)); > - continue; > - } > - BytesWritten = FvHeader->HeaderLength; > - Status = SpiFlashWrite ((UINTN)BaseAddress, &BytesWritten, > (UINT8*)FvHeader); > - if (EFI_ERROR (Status)) { > - DEBUG ((DEBUG_WARN, "ERROR - SpiFlashWrite Error %r\n", Status)); > - continue; > - } > - if (BytesWritten != FvHeader->HeaderLength) { > - DEBUG ((DEBUG_WARN, "ERROR - BytesWritten != HeaderLength\n")); > - DEBUG ((DEBUG_INFO, " BytesWritten = 0x%X\n HeaderLength = 0x%X\n", > BytesWritten, FvHeader->HeaderLength)); > - continue; > - } > - Status = SpiFlashLock (); > - if (EFI_ERROR (Status)) { > - DEBUG ((DEBUG_WARN, "ERROR - SpiFlashLock Error %r\n", Status)); > - continue; > - } > - DEBUG ((DEBUG_INFO, "FV Header @ 0x%X restored with static data\n", > BaseAddress)); > - // > - // Clear cache for this range. > - // > - WriteBackInvalidateDataCacheRange ( (VOID *) (UINTN) BaseAddress, > FvHeader->BlockMap->Length); > - } > - } > - > - // > - // Calculate the total size for all firmware volume block instances > - // > - BufferSize = 0; > - for (Idx = 0; ; Idx++) { > - if (mPlatformFvBaseAddress[Idx].FvSize == 0 && > mPlatformFvBaseAddress[Idx].FvBase == 0) { > - break; > - } > - BaseAddress = mPlatformFvBaseAddress[Idx].FvBase; > - FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; > - > - if (!IsFvHeaderValid (BaseAddress, FvHeader)) { > - DEBUG ((DEBUG_WARN, "ERROR - The FV in 0x%x is invalid!\n", > FvHeader)); > - continue; > - } > - > - BufferSize += (FvHeader->HeaderLength + > - sizeof (EFI_FVB_INSTANCE) - > - sizeof (EFI_FIRMWARE_VOLUME_HEADER) > - ); > - } > - > - mFvbModuleGlobal.FvbInstance = (EFI_FVB_INSTANCE *) > AllocateRuntimeZeroPool (BufferSize); > - if (mFvbModuleGlobal.FvbInstance == NULL) { > - ASSERT (FALSE); > - return; > - } > - > - MaxLbaSize = 0; > - FvbInstance = mFvbModuleGlobal.FvbInstance; > - mFvbModuleGlobal.NumFv = 0; > - > - for (Idx = 0; ; Idx++) { > - if (mPlatformFvBaseAddress[Idx].FvSize == 0 && > mPlatformFvBaseAddress[Idx].FvBase == 0) { > - break; > - } > - BaseAddress = mPlatformFvBaseAddress[Idx].FvBase; > - FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; > - > - if (!IsFvHeaderValid (BaseAddress, FvHeader)) { > - DEBUG ((DEBUG_WARN, "ERROR - The FV in 0x%x is invalid!\n", > FvHeader)); > - continue; > - } > - > - FvbInstance->Signature = FVB_INSTANCE_SIGNATURE; > - CopyMem (&(FvbInstance->FvHeader), FvHeader, FvHeader->HeaderLength); > - > - FvHeader = &(FvbInstance->FvHeader); > - FvbInstance->FvBase = (UINTN)BaseAddress; > - > - // > - // Process the block map for each FV > - // > - FvbInstance->NumOfBlocks = 0; > - for (PtrBlockMapEntry = FvHeader->BlockMap; > - PtrBlockMapEntry->NumBlocks != 0; > - PtrBlockMapEntry++) { > - // > - // Get the maximum size of a block. > - // > - if (MaxLbaSize < PtrBlockMapEntry->Length) { > - MaxLbaSize = PtrBlockMapEntry->Length; > - } > - FvbInstance->NumOfBlocks += PtrBlockMapEntry->NumBlocks; > - } > - > - // > - // Add a FVB Protocol Instance > - // > - InstallFvbProtocol (FvbInstance); > - mFvbModuleGlobal.NumFv++; > - > - // > - // Move on to the next FvbInstance > - // > - FvbInstance = (EFI_FVB_INSTANCE *) ((UINTN)((UINT8 *)FvbInstance) + > - FvHeader->HeaderLength + > - (sizeof (EFI_FVB_INSTANCE) - > sizeof > (EFI_FIRMWARE_VOLUME_HEADER))); > - > - } > - } > -} > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone > Mm.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone > Mm.c > deleted file mode 100644 > index 252c818d6551..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone > Mm.c > +++ /dev/null > @@ -1,32 +0,0 @@ > -/** @file > - MM driver source for several Serial Flash devices > - which are compliant with the Intel(R) Serial Flash Interface Compatibility > Specification. > - > - Copyright (c) Microsoft Corporation.<BR> > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "SpiFvbServiceCommon.h" > -#include "SpiFvbServiceMm.h" > - > -/** > - The driver Standalone MM entry point. > - > - @param[in] ImageHandle Image handle of this driver. > - @param[in] MmSystemTable A pointer to the MM system table. > - > - @retval EFI_SUCCESS This function always returns EFI_SUCCESS. > - > -**/ > -EFI_STATUS > -EFIAPI > -SpiFvbStandaloneMmInitialize ( > - IN EFI_HANDLE ImageHandle, > - IN EFI_MM_SYSTEM_TABLE *MmSystemTable > - ) > -{ > - FvbInitialize (); > - > - return EFI_SUCCESS; > -} > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditional > Mm.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditional > Mm.c > deleted file mode 100644 > index 1c2dac70e3c6..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditional > Mm.c > +++ /dev/null > @@ -1,32 +0,0 @@ > -/** @file > - MM driver source for several Serial Flash devices > - which are compliant with the Intel(R) Serial Flash Interface Compatibility > Specification. > - > - Copyright (c) Microsoft Corporation.<BR> > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "SpiFvbServiceCommon.h" > -#include "SpiFvbServiceMm.h" > - > -/** > - The driver Traditional MM entry point. > - > - @param[in] ImageHandle Image handle of this driver. > - @param[in] SystemTable A pointer to the EFI system table. > - > - @retval EFI_SUCCESS This function always returns EFI_SUCCESS. > - > -**/ > -EFI_STATUS > -EFIAPI > -SpiFvbTraditionalMmInitialize ( > - IN EFI_HANDLE ImageHandle, > - IN EFI_SYSTEM_TABLE *SystemTable > - ) > -{ > - FvbInitialize (); > - > - return EFI_SUCCESS; > -} > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h > deleted file mode 100644 > index e9d69e985814..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h > +++ /dev/null > @@ -1,158 +0,0 @@ > -/** @file > - Common source definitions used in serial flash drivers > - > -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> > -SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#ifndef _SPI_FVB_SERVICE_COMMON_H > -#define _SPI_FVB_SERVICE_COMMON_H > - > -#include <Guid/EventGroup.h> > -#include <Guid/FirmwareFileSystem2.h> > -#include <Guid/SystemNvDataGuid.h> > -#include <Protocol/DevicePath.h> > -#include <Protocol/FirmwareVolumeBlock.h> > - > -#include <Library/BaseLib.h> > -#include <Library/DebugLib.h> > -#include <Library/BaseMemoryLib.h> > -#include <Library/IoLib.h> > -#include <Library/CacheMaintenanceLib.h> > -#include <Library/MemoryAllocationLib.h> > -#include <Library/PcdLib.h> > -#include <Library/DevicePathLib.h> > -#include <Library/HobLib.h> > - > -#include <Library/SpiFlashCommonLib.h> > - > -// > -// Define two helper macro to extract the Capability field or Status field > in FVB > -// bit fields > -// > -#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \ > - EFI_FVB2_READ_ENABLED_CAP | \ > - EFI_FVB2_WRITE_DISABLED_CAP | \ > - EFI_FVB2_WRITE_ENABLED_CAP | \ > - EFI_FVB2_LOCK_CAP \ > - ) > - > -#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | > EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS) > - > -#define FVB_INSTANCE_SIGNATURE SIGNATURE_32('F','V','B','I') > - > -typedef struct { > - UINT32 Signature; > - UINTN FvBase; > - UINTN NumOfBlocks; > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; > - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FvbProtocol; > - EFI_FIRMWARE_VOLUME_HEADER FvHeader; > -} EFI_FVB_INSTANCE; > - > -typedef struct { > - EFI_FVB_INSTANCE *FvbInstance; > - UINT32 NumFv; > -} FVB_GLOBAL; > - > -// > -// Fvb Protocol instance data > -// > -#define FVB_INSTANCE_FROM_THIS(a) CR(a, EFI_FVB_INSTANCE, FvbProtocol, > FVB_INSTANCE_SIGNATURE) > - > -typedef struct { > - MEDIA_FW_VOL_DEVICE_PATH FvDevPath; > - EFI_DEVICE_PATH_PROTOCOL EndDevPath; > -} FV_PIWG_DEVICE_PATH; > - > -typedef struct { > - MEMMAP_DEVICE_PATH MemMapDevPath; > - EFI_DEVICE_PATH_PROTOCOL EndDevPath; > -} FV_MEMMAP_DEVICE_PATH; > - > -typedef struct { > - UINT32 FvBase; > - UINT32 FvSize; > -} FV_INFO; > - > -// > -// Protocol APIs > -// > -EFI_STATUS > -EFIAPI > -FvbProtocolGetAttributes ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - OUT EFI_FVB_ATTRIBUTES_2 *Attributes > - ); > - > -EFI_STATUS > -EFIAPI > -FvbProtocolSetAttributes ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes > - ); > - > -EFI_STATUS > -EFIAPI > -FvbProtocolGetPhysicalAddress ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - OUT EFI_PHYSICAL_ADDRESS *Address > - ); > - > -EFI_STATUS > -EFIAPI > -FvbProtocolGetBlockSize ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN EFI_LBA Lba, > - OUT UINTN *BlockSize, > - OUT UINTN *NumOfBlocks > - ); > - > -EFI_STATUS > -EFIAPI > -FvbProtocolRead ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN EFI_LBA Lba, > - IN UINTN Offset, > - IN OUT UINTN *NumBytes, > - OUT UINT8 *Buffer > - ); > - > -EFI_STATUS > -EFIAPI > -FvbProtocolWrite ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - IN EFI_LBA Lba, > - IN UINTN Offset, > - IN OUT UINTN *NumBytes, > - IN UINT8 *Buffer > - ); > - > -EFI_STATUS > -EFIAPI > -FvbProtocolEraseBlocks ( > - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, > - ... > - ); > - > -BOOLEAN > -IsFvHeaderValid ( > - IN EFI_PHYSICAL_ADDRESS FvBase, > - IN CONST EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader > - ); > - > -EFI_STATUS > -GetFvbInfo ( > - IN EFI_PHYSICAL_ADDRESS FvBaseAddress, > - OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo > - ); > - > -extern FVB_GLOBAL mFvbModuleGlobal; > -extern FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate; > -extern FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate; > -extern EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL mFvbProtocolTemplate; > -extern FV_INFO mPlatformFvBaseAddress[]; > -extern FV_INFO mPlatformDefaultBaseAddress[]; > - > -#endif > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h > deleted file mode 100644 > index 36af1130c8ee..000000000000 > --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h > +++ /dev/null > @@ -1,22 +0,0 @@ > -/** @file > - Definitions common to MM implementation in this driver. > - > - Copyright (c) Microsoft Corporation.<BR> > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#ifndef _SPI_FVB_SERVICE_MM_H_ > -#define _SPI_FVB_SERVICE_MM_H_ > - > -/** > - The function does the necessary initialization work for > - Firmware Volume Block Driver. > - > -**/ > -VOID > -FvbInitialize ( > - VOID > - ); > - > -#endif > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > deleted file mode 100644 > index 10e51e11756f..000000000000 > --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > +++ /dev/null > @@ -1,68 +0,0 @@ > -### @file > -# Component description file for the Serial Flash device Runtime driver. > -# > -# Copyright (c) 2017-2019, Intel Corporation. All rights reserved.<BR> > -# Copyright (c) Microsoft Corporation.<BR> > -# > -# SPDX-License-Identifier: BSD-2-Clause-Patent > -# > -### > - > -[Defines] > - INF_VERSION = 0x00010017 > - BASE_NAME = SpiFvbServiceSmm > - FILE_GUID = 68A10D85-6858-4402-B070-028B3EA21747 > - VERSION_STRING = 1.0 > - MODULE_TYPE = DXE_SMM_DRIVER > - PI_SPECIFICATION_VERSION = 1.10 > - ENTRY_POINT = SpiFvbTraditionalMmInitialize > - > -# > -# The following information is for reference only and not required by the > build > tools. > -# > -# VALID_ARCHITECTURES = IA32 X64 > -# > - > -[LibraryClasses] > - PcdLib > - MemoryAllocationLib > - CacheMaintenanceLib > - BaseMemoryLib > - DebugLib > - BaseLib > - UefiBootServicesTableLib > - UefiDriverEntryPoint > - SpiFlashCommonLib > - MmServicesTableLib > - > -[Packages] > - MdePkg/MdePkg.dec > - MdeModulePkg/MdeModulePkg.dec > - MinPlatformPkg/MinPlatformPkg.dec > - > -[Pcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > CONSUMES > - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase ## > CONSUMES > - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize ## > CONSUMES > - > -[Sources] > - FvbInfo.c > - SpiFvbServiceCommon.h > - SpiFvbServiceCommon.c > - SpiFvbServiceMm.h > - SpiFvbServiceMm.c > - SpiFvbServiceTraditionalMm.c > - > -[Protocols] > - gEfiDevicePathProtocolGuid ## PRODUCES > - gEfiSmmFirmwareVolumeBlockProtocolGuid ## PRODUCES > - > -[Guids] > - gEfiFirmwareFileSystem2Guid ## CONSUMES > - gEfiSystemNvDataFvGuid ## CONSUMES > - > -[Depex] > - TRUE > diff --git > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone > Mm.inf > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone > Mm.inf > deleted file mode 100644 > index 9f08d3673f41..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone > Mm.inf > +++ /dev/null > @@ -1,67 +0,0 @@ > -### @file > -# Component description file for the Serial Flash device Standalone MM > driver. > -# > -# Copyright (c) 2017-2019, Intel Corporation. All rights reserved.<BR> > -# Copyright (c) Microsoft Corporation.<BR> > -# > -# SPDX-License-Identifier: BSD-2-Clause-Patent > -# > -### > - > -[Defines] > - INF_VERSION = 0x0001001B > - BASE_NAME = SpiFvbServiceStandaloneMm > - FILE_GUID = E6313655-8BD0-4EAB-B319-AD5E212CE6AB > - VERSION_STRING = 1.0 > - MODULE_TYPE = MM_STANDALONE > - PI_SPECIFICATION_VERSION = 0x00010032 > - ENTRY_POINT = SpiFvbStandaloneMmInitialize > - > -# > -# The following information is for reference only and not required by the > build > tools. > -# > -# VALID_ARCHITECTURES = IA32 X64 > -# > - > -[LibraryClasses] > - BaseLib > - BaseMemoryLib > - CacheMaintenanceLib > - DebugLib > - MemoryAllocationLib > - PcdLib > - MmServicesTableLib > - SpiFlashCommonLib > - StandaloneMmDriverEntryPoint > - > -[Packages] > - MdePkg/MdePkg.dec > - MdeModulePkg/MdeModulePkg.dec > - MinPlatformPkg/MinPlatformPkg.dec > - > -[Pcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > CONSUMES > - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase ## > CONSUMES > - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize ## > CONSUMES > - > -[Sources] > - FvbInfo.c > - SpiFvbServiceCommon.h > - SpiFvbServiceCommon.c > - SpiFvbServiceMm.h > - SpiFvbServiceMm.c > - SpiFvbServiceStandaloneMm.c > - > -[Protocols] > - gEfiDevicePathProtocolGuid ## PRODUCES > - gEfiSmmFirmwareVolumeBlockProtocolGuid ## PRODUCES > - > -[Guids] > - gEfiFirmwareFileSystem2Guid ## CONSUMES > - gEfiSystemNvDataFvGuid ## CONSUMES > - > -[Depex] > - TRUE > diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > index 35cbd40abb05..15867eee4e61 100644 > --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > @@ -159,8 +159,6 @@ [Components] > > > MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootM > anagerLib.inf > > - MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > - MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf > > MinPlatformPkg/Flash/Library/SpiFlashCommonLibNull/SpiFlashCommonLibNull. > inf > > MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryConfig.inf > -- > 2.28.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#75373): https://edk2.groups.io/g/devel/message/75373 Mute This Topic: https://groups.io/mt/82929234/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-