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> Reviewed-by: Nate DeSimone <nathaniel.l.desim...@intel.com> Reviewed-by: Chasel Chiu <chasel.c...@intel.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/SpiFvbServiceStandaloneMm.c | 32 - Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditionalMm.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/SpiFvbServiceStandaloneMm.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/SpiFvbServiceStandaloneMm.c b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.c deleted file mode 100644 index 252c818d6551..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.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/SpiFvbServiceTraditionalMm.c b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditionalMm.c deleted file mode 100644 index 1c2dac70e3c6..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditionalMm.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/SpiFvbServiceStandaloneMm.inf b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf deleted file mode 100644 index 9f08d3673f41..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.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/DxePlatformBootManagerLib.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 (#76719): https://edk2.groups.io/g/devel/message/76719 Mute This Topic: https://groups.io/mt/83619580/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-