From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web12.160.1627960715578285888 for ; Mon, 02 Aug 2021 20:18:35 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=DJQDzaDl; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [167.220.2.74]) by linux.microsoft.com (Postfix) with ESMTPSA id C5DDF2096B74; Mon, 2 Aug 2021 19:40:56 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C5DDF2096B74 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1627958456; bh=krmjQKRCmi+nXzbKkHdAgYMa744Hbz0mnAPzavFibiw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DJQDzaDl5f8HWWrsqLCs1Et3syU+BKY0lvmkO8iDkW4ukK2zehfLgFpBEkXNzt9OB iGv6bSjHVhjAeQqK6rJRK4wLAvLlIrVRDSw4vLobLxlwCcJjl+E/AmJFxgut6xS+4T a0kzXG54GOWR4rMtTt4P8nFzxSfUtx7c1CDRkAUk= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone , Liming Gao , Eric Dong Subject: [edk2-platforms][PATCH v5 27/46] MinPlatformPkg: Remove SpiFvbService modules Date: Mon, 2 Aug 2021 22:38:55 -0400 Message-Id: <20210803023914.1569-28-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210803023914.1569-1-mikuback@linux.microsoft.com> References: <20210803023914.1569-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Kubacki REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3307 SpiFvbServiceSmm and SpiFvbServiceStandaloneMm have moved to IntelSiliconPkg. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Liming Gao Cc: Eric Dong Signed-off-by: Michael Kubacki Reviewed-by: Nate DeSimone Reviewed-by: Chasel Chiu --- 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/SpiFvbServiceStandalon= eMm.c | 32 - Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTradition= alMm.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/SpiFvbServiceStandalon= eMm.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.
-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(PcdFlashNvStorageVaria= bleBase) -#define SYSTEM_NV_BLOCK_NUM ((FixedPcdGet32(PcdFlashNvStorageVar= iableSize)+ FixedPcdGet32(PcdFlashNvStorageFtwWorkingSize) + FixedPcdGet3= 2(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, wh= ich is used to restore -// Fv header if it's corrupted. -// -EFI_FVB2_MEDIA_INFO mPlatformFvbMediaInfo[] =3D { - // - // 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 deta= ils on EFI_FVB_ATTRIBUTES_2 - sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENT= RY), - 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 =3D 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI= _FVB2_MEDIA_INFO); Index++) { - if (mPlatformFvbMediaInfo[Index].BaseAddress =3D=3D FvBaseAddress) { - FvHeader =3D &mPlatformFvbMediaInfo[Index].FvbInfo; - - // - // Update the checksum value of FV header. - // - FvHeader->Checksum =3D CalculateCheckSum16 ( (UINT16 *) FvHeader, = FvHeader->HeaderLength); - - *FvbInfo =3D 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)->HeaderLen= gth)); - DEBUG ((DEBUG_INFO, "Header Checksum: 0x%X\n", (*FvbInfo)->Checksu= m)); - DEBUG ((DEBUG_INFO, "FvBlockMap[0].NumBlocks: 0x%x \n", (*FvbInfo)= ->BlockMap[0].NumBlocks)); - DEBUG ((DEBUG_INFO, "FvBlockMap[0].BlockLength: 0x%x \n", (*FvbInf= o)->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", (*FvbI= nfo)->BlockMap[1].Length)); - - return EFI_SUCCESS; - } - } - return EFI_NOT_FOUND; -} diff --git a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServ= iceCommon.c b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbSer= viceCommon.c deleted file mode 100644 index 113c749d04ff..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceComm= on.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 Compatibi= lity Specification. - -Copyright (c) 2017, Intel Corporation. All rights reserved.
-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 p= erformance issue. -// -FV_INFO mPlatformFvBaseAddress[] =3D { - {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase), FixedPcdGet3= 2(PcdFlashNvStorageVariableSize)}, - {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase), FixedPcdGet32(PcdF= lashFvMicrocodeSize)}, - {0, 0} -}; - -FV_INFO mPlatformDefaultBaseAddress[] =3D { - {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase), FixedPcdGet3= 2(PcdFlashNvStorageVariableSize)}, - {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase), FixedPcdGet32(PcdF= lashFvMicrocodeSize)}, - {0, 0} -}; - -FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate =3D { - { - { - 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 =3D { - { - { - 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 =3D { - 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 bloc= k - @param[out] NumOfBlocks A pointer to a caller allocated UINTN in w= hich 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 =3D 0; - Offset =3D 0; - BlockMap =3D &(FvbInstance->FvHeader.BlockMap[0]); - - // - // Parse the blockmap of the FV to find which map entry the Lba belong= s to - // - while (TRUE) { - NumBlocks =3D BlockMap->NumBlocks; - BlockLength =3D BlockMap->Length; - - if ( NumBlocks =3D=3D 0 || BlockLength =3D=3D 0) { - return EFI_INVALID_PARAMETER; - } - - NextLba =3D StartLba + NumBlocks; - - // - // The map entry found - // - if (Lba >=3D StartLba && Lba < NextLba) { - Offset =3D Offset + (UINTN)MultU64x32((Lba - StartLba), BlockLengt= h); - if (LbaAddress ) { - *LbaAddress =3D FvbInstance->FvBase + Offset; - } - - if (LbaLength ) { - *LbaLength =3D BlockLength; - } - - if (NumOfBlocks ) { - *NumOfBlocks =3D (UINTN)(NextLba - Lba); - } - return EFI_SUCCESS; - } - - StartLba =3D NextLba; - Offset =3D 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_INSTA= NCE - @param[in] Lba The logical block address to be = read from - @param[in] BlockOffset Offset into the block at which t= o begin reading - @param[in] NumBytes Pointer that on input contains t= he total size of - the buffer. On output, it contai= ns the total number - of bytes read - @param[in] Buffer Pointer to a caller allocated bu= ffer that will be - used to hold the data read - - - @retval EFI_SUCCESS The firmware volume was read suc= cessfully and - contents are in Buffer - @retval EFI_BAD_BUFFER_SIZE Read attempted across a LBA boun= dary. On output, - NumBytes contains the total numb= er of bytes returned - in Buffer - @retval EFI_ACCESS_DENIED The firmware volume is in the Re= adDisabled state - @retval EFI_DEVICE_ERROR The block device is not function= ing 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 =3D FALSE; - - if ((NumBytes =3D=3D NULL) || (Buffer =3D=3D NULL)) { - return EFI_INVALID_PARAMETER; - } - if (*NumBytes =3D=3D 0) { - return EFI_INVALID_PARAMETER; - } - - Status =3D FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength= , NULL); - if (EFI_ERROR(Status)) { - return Status; - } - - Attributes =3D FvbGetVolumeAttributes (FvbInstance); - - if ((Attributes & EFI_FVB2_READ_STATUS) =3D=3D 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 =3D (UINT32) (LbaLength - BlockOffset); - BadBufferSize =3D TRUE; - } - - Status =3D 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 be= gin writing - @param[in] NumBytes Pointer that on input contains the t= otal size of - the buffer. On output, it contains t= he 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 succ= essfully - @retval EFI_BAD_BUFFER_SIZE Write attempted across a LBA boundar= y. On output, - NumBytes contains the total number o= f bytes - actually written - @retval EFI_ACCESS_DENIED The firmware volume is in the WriteD= isabled 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, Buf= fer 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 =3D FALSE; - - if ((NumBytes =3D=3D NULL) || (Buffer =3D=3D NULL)) { - return EFI_INVALID_PARAMETER; - } - if (*NumBytes =3D=3D 0) { - return EFI_INVALID_PARAMETER; - } - - Status =3D FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength= , NULL); - if (EFI_ERROR(Status)) { - return Status; - } - - // - // Check if the FV is write enabled - // - Attributes =3D FvbGetVolumeAttributes (FvbInstance); - if ((Attributes & EFI_FVB2_WRITE_STATUS) =3D=3D 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 =3D (UINT32) (LbaLength - BlockOffset); - BadBufferSize =3D TRUE; - } - - Status =3D SpiFlashWrite (LbaAddress + BlockOffset, (UINT32 *)NumBytes= , Buffer); - if (EFI_ERROR (Status)) { - return Status; - } - - Status =3D 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 com= pleted - @retval EFI_ACCESS_DENIED The firmware volume is in the WriteDis= abled state - @retval EFI_DEVICE_ERROR The block device is not functioning co= rrectly 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 =3D FvbGetVolumeAttributes (FvbInstance); - - if( (Attributes & EFI_FVB2_WRITE_STATUS) =3D=3D 0) { - return EFI_ACCESS_DENIED; - } - - // - // Get the starting address of the block for erase. - // - Status =3D FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength= , NULL); - if (EFI_ERROR(Status)) { - return Status; - } - - Status =3D SpiFlashBlockErase (LbaAddress, &LbaLength); - if (EFI_ERROR (Status)) { - return Status; - } - - Status =3D 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 volu= me settings. - On successful return, it contains th= e new settings - of the firmware volume - - @retval EFI_SUCCESS Successfully returns - @retval EFI_ACCESS_DENIED The volume setting is locked and can= not be modified - @retval EFI_INVALID_PARAMETER Instance not found, or The attribute= s 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 =3D (EFI_FVB_ATTRIBUTES_2 *) &(FvbInstance->FvHeader.Att= ributes); - OldAttributes =3D *AttribPtr; - Capabilities =3D OldAttributes & EFI_FVB2_CAPABILITIES; - OldStatus =3D OldAttributes & EFI_FVB2_STATUS; - NewStatus =3D *Attributes & EFI_FVB2_STATUS; - - UnchangedAttributes =3D 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 & UnchangedAt= tributes)) { - 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) =3D=3D 0) { - if ((NewStatus & EFI_FVB2_READ_STATUS) =3D=3D 0) { - return EFI_INVALID_PARAMETER; - } - } - - // - // Test read enable - // - if ((Capabilities & EFI_FVB2_READ_ENABLED_CAP) =3D=3D 0) { - if (NewStatus & EFI_FVB2_READ_STATUS) { - return EFI_INVALID_PARAMETER; - } - } - - // - // Test write disable - // - if ((Capabilities & EFI_FVB2_WRITE_DISABLED_CAP) =3D=3D 0) { - if ((NewStatus & EFI_FVB2_WRITE_STATUS) =3D=3D 0) { - return EFI_INVALID_PARAMETER; - } - } - - // - // Test write enable - // - if ((Capabilities & EFI_FVB2_WRITE_ENABLED_CAP) =3D=3D 0) { - if (NewStatus & EFI_FVB2_WRITE_STATUS) { - return EFI_INVALID_PARAMETER; - } - } - - // - // Test lock - // - if ((Capabilities & EFI_FVB2_LOCK_CAP) =3D=3D 0) { - if (NewStatus & EFI_FVB2_LOCK_STATUS) { - return EFI_INVALID_PARAMETER; - } - } - - *AttribPtr =3D (*AttribPtr) & (0xFFFFFFFF & (~EFI_FVB2_STATUS)); - *AttribPtr =3D (*AttribPtr) | NewStatus; - *Attributes =3D *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 =3D=3D PcdGet32(PcdFlashNvStorageVariableBase)) { - if (CompareMem (&FvHeader->FileSystemGuid, &gEfiSystemNvDataFvGuid, = sizeof(EFI_GUID)) !=3D 0 ) { - return FALSE; - } - } else { - if (CompareMem (&FvHeader->FileSystemGuid, &gEfiFirmwareFileSystem2G= uid, sizeof(EFI_GUID)) !=3D 0 ) { - return FALSE; - } - } - if ( (FvHeader->Revision !=3D EFI_FVH_REVISION) || - (FvHeader->Signature !=3D EFI_FVH_SIGNATURE) || - (FvHeader->FvLength =3D=3D ((UINTN) -1)) || - ((FvHeader->HeaderLength & 0x01 ) !=3D0) ) { - return FALSE; - } - - if (CalculateCheckSum16 ((UINT16 *) FvHeader, FvHeader->HeaderLength) = !=3D 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 =3D FVB_INSTANCE_FROM_THIS (This); - - *Address =3D 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 =3D 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 =3D FVB_INSTANCE_FROM_THIS (This); - - *Attributes =3D 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 =3D FVB_INSTANCE_FROM_THIS (This); - - Status =3D 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 ve= rified - prior to erasing any blocks. If a block is requested that does not ex= ist - 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 v= olume. - - @param[in] This Calling context - @param[in] ... Starting LBA followed by Number of Lba to eras= e. - 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 correctl= y and - could not be written. Firmware device may ha= ve 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 =3D FVB_INSTANCE_FROM_THIS (This); - - NumOfBlocks =3D FvbInstance->NumOfBlocks; - - VA_START (Args, This); - - do { - StartingLba =3D VA_ARG (Args, EFI_LBA); - if ( StartingLba =3D=3D EFI_LBA_LIST_TERMINATOR ) { - break; - } - - NumOfLba =3D VA_ARG (Args, UINT32); - - // - // Check input parameters - // - if (NumOfLba =3D=3D 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 =3D VA_ARG (Args, EFI_LBA); - if (StartingLba =3D=3D EFI_LBA_LIST_TERMINATOR) { - break; - } - - NumOfLba =3D VA_ARG (Args, UINT32); - - while ( NumOfLba > 0 ) { - Status =3D 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 eith= er - 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 successf= ully - @retval EFI_BAD_BUFFER_SIZE Write attempted across a LBA boundary. O= n output, - NumBytes contains the total number of by= tes - actually written - @retval EFI_ACCESS_DENIED The firmware volume is in the WriteDisab= led state - @retval EFI_DEVICE_ERROR The block device is not functioning corr= ectly 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 =3D FVB_INSTANCE_FROM_THIS (This); - - DEBUG((DEBUG_INFO, - "FvbProtocolWrite: Lba: 0x%lx Offset: 0x%x NumBytes: 0x%x, Buffer: 0= x%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 successfull= y and - contents are in Buffer - @retval EFI_BAD_BUFFER_SIZE Read attempted across a LBA boundary. On= output, - NumBytes contains the total number of by= tes returned - in Buffer - @retval EFI_ACCESS_DENIED The firmware volume is in the ReadDisabl= ed state - @retval EFI_DEVICE_ERROR The block device is not functioning corr= ectly 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 =3D FVB_INSTANCE_FROM_THIS (This); - Status =3D 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/SpiFvbServ= iceMm.c b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbService= Mm.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 Compatibi= lity Specification. - - Copyright (c) 2017, Intel Corporation. All rights reserved.
- Copyright (c) Microsoft Corporation.
- SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "SpiFvbServiceCommon.h" -#include -#include -#include - -/** - The function installs EFI_FIRMWARE_VOLUME_BLOCK protocol - for each FV in the system. - - @param[in] FvbInstance The pointer to a FW volume instance structur= e, - 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 !=3D NULL); - if (FvbInstance =3D=3D NULL) { - return; - } - - CopyMem (&FvbInstance->FvbProtocol, &mFvbProtocolTemplate, sizeof (EFI= _FIRMWARE_VOLUME_BLOCK_PROTOCOL)); - - FvHeader =3D &FvbInstance->FvHeader; - if (FvHeader =3D=3D NULL) { - return; - } - - // - // Set up the devicepath - // - DEBUG ((DEBUG_INFO, "FwBlockService.c: Setting up DevicePath for 0x%lx= :\n", FvbInstance->FvBase)); - if (FvHeader->ExtHeaderOffset =3D=3D 0) { - // - // FV does not contains extension header, then produce MEMMAP_DEVICE= _PATH - // - FvbInstance->DevicePath =3D (EFI_DEVICE_PATH_PROTOCOL *) AllocateRun= timeCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH), &mFvMemmapDevicePathTemplat= e); - if (FvbInstance->DevicePath =3D=3D NULL) { - DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for MEM= MAP_DEVICE_PATH failed\n")); - return; - } - ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)->MemMapDevPath.S= tartingAddress =3D FvbInstance->FvBase; - ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)->MemMapDevPath.E= ndingAddress =3D FvbInstance->FvBase + FvHeader->FvLength - 1; - } else { - FvbInstance->DevicePath =3D (EFI_DEVICE_PATH_PROTOCOL *) AllocateRun= timeCopyPool (sizeof (FV_PIWG_DEVICE_PATH), &mFvPIWGDevicePathTemplate); - if (FvbInstance->DevicePath =3D=3D NULL) { - DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for FV_= PIWG_DEVICE_PATH failed\n")); - return; - } - CopyGuid ( - &((FV_PIWG_DEVICE_PATH *)FvbInstance->DevicePath)->FvDevPath.FvNam= e, - (GUID *)(UINTN)(FvbInstance->FvBase + FvHeader->ExtHeaderOffset) - ); - } - - // - // LocateDevicePath fails so install a new interface and device path - // - FvbHandle =3D NULL; - - Status =3D gMmst->MmInstallProtocolInterface ( - &FvbHandle, - &gEfiSmmFirmwareVolumeBlockProtocolGuid, - EFI_NATIVE_INTERFACE, - &(FvbInstance->FvbProtocol) - ); - ASSERT_EFI_ERROR (Status); - - Status =3D 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 =3D PcdGet32(PcdFlashNvStorageVariabl= eBase); - mPlatformFvBaseAddress[0].FvSize =3D PcdGet32(PcdFlashNvStorageVariabl= eSize); - mPlatformFvBaseAddress[1].FvBase =3D PcdGet32(PcdFlashFvMicrocodeBase)= ; - mPlatformFvBaseAddress[1].FvSize =3D PcdGet32(PcdFlashFvMicrocodeSize)= ; - mPlatformDefaultBaseAddress[0].FvBase =3D PcdGet32(PcdFlashNvStorageVa= riableBase); - mPlatformDefaultBaseAddress[0].FvSize =3D PcdGet32(PcdFlashNvStorageVa= riableSize); - mPlatformDefaultBaseAddress[1].FvBase =3D PcdGet32(PcdFlashFvMicrocode= Base); - mPlatformDefaultBaseAddress[1].FvSize =3D PcdGet32(PcdFlashFvMicrocode= Size); - - // - // 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 =3D 0;; Idx++) { - if (mPlatformFvBaseAddress[Idx].FvSize =3D=3D 0 && mPlatformFvBase= Address[Idx].FvBase =3D=3D 0) { - break; - } - - BaseAddress =3D mPlatformFvBaseAddress[Idx].FvBase; - FvHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; - - if (!IsFvHeaderValid (BaseAddress, FvHeader)) { - BytesWritten =3D 0; - BytesErased =3D 0; - DEBUG ((DEBUG_ERROR, "ERROR - The FV in 0x%x is invalid!\n", FvH= eader)); - Status =3D 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 dat= a\n", BaseAddress)); - // - // Spi erase - // - BytesErased =3D (UINTN) FvHeader->BlockMap->Length; - Status =3D SpiFlashBlockErase( (UINTN) BaseAddress, &BytesErased= ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "ERROR - SpiFlashBlockErase Error %r\n", = Status)); - continue; - } - if (BytesErased !=3D FvHeader->BlockMap->Length) { - DEBUG ((DEBUG_WARN, "ERROR - BytesErased !=3D FvHeader->BlockM= ap->Length\n")); - DEBUG ((DEBUG_INFO, " BytesErased =3D 0x%X\n Length =3D 0x%X\n= ", BytesErased, FvHeader->BlockMap->Length)); - continue; - } - BytesWritten =3D FvHeader->HeaderLength; - Status =3D SpiFlashWrite ((UINTN)BaseAddress, &BytesWritten, (UI= NT8*)FvHeader); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "ERROR - SpiFlashWrite Error %r\n", Statu= s)); - continue; - } - if (BytesWritten !=3D FvHeader->HeaderLength) { - DEBUG ((DEBUG_WARN, "ERROR - BytesWritten !=3D HeaderLength\n"= )); - DEBUG ((DEBUG_INFO, " BytesWritten =3D 0x%X\n HeaderLength =3D= 0x%X\n", BytesWritten, FvHeader->HeaderLength)); - continue; - } - Status =3D 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 =3D 0; - for (Idx =3D 0; ; Idx++) { - if (mPlatformFvBaseAddress[Idx].FvSize =3D=3D 0 && mPlatformFvBase= Address[Idx].FvBase =3D=3D 0) { - break; - } - BaseAddress =3D mPlatformFvBaseAddress[Idx].FvBase; - FvHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; - - if (!IsFvHeaderValid (BaseAddress, FvHeader)) { - DEBUG ((DEBUG_WARN, "ERROR - The FV in 0x%x is invalid!\n", FvHe= ader)); - continue; - } - - BufferSize +=3D (FvHeader->HeaderLength + - sizeof (EFI_FVB_INSTANCE) - - sizeof (EFI_FIRMWARE_VOLUME_HEADER) - ); - } - - mFvbModuleGlobal.FvbInstance =3D (EFI_FVB_INSTANCE *) AllocateRunti= meZeroPool (BufferSize); - if (mFvbModuleGlobal.FvbInstance =3D=3D NULL) { - ASSERT (FALSE); - return; - } - - MaxLbaSize =3D 0; - FvbInstance =3D mFvbModuleGlobal.FvbInstance; - mFvbModuleGlobal.NumFv =3D 0; - - for (Idx =3D 0; ; Idx++) { - if (mPlatformFvBaseAddress[Idx].FvSize =3D=3D 0 && mPlatformFvBase= Address[Idx].FvBase =3D=3D 0) { - break; - } - BaseAddress =3D mPlatformFvBaseAddress[Idx].FvBase; - FvHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; - - if (!IsFvHeaderValid (BaseAddress, FvHeader)) { - DEBUG ((DEBUG_WARN, "ERROR - The FV in 0x%x is invalid!\n", FvHe= ader)); - continue; - } - - FvbInstance->Signature =3D FVB_INSTANCE_SIGNATURE; - CopyMem (&(FvbInstance->FvHeader), FvHeader, FvHeader->HeaderLengt= h); - - FvHeader =3D &(FvbInstance->FvHeader); - FvbInstance->FvBase =3D (UINTN)BaseAddress; - - // - // Process the block map for each FV - // - FvbInstance->NumOfBlocks =3D 0; - for (PtrBlockMapEntry =3D FvHeader->BlockMap; - PtrBlockMapEntry->NumBlocks !=3D 0; - PtrBlockMapEntry++) { - // - // Get the maximum size of a block. - // - if (MaxLbaSize < PtrBlockMapEntry->Length) { - MaxLbaSize =3D PtrBlockMapEntry->Length; - } - FvbInstance->NumOfBlocks +=3D PtrBlockMapEntry->NumBlocks; - } - - // - // Add a FVB Protocol Instance - // - InstallFvbProtocol (FvbInstance); - mFvbModuleGlobal.NumFv++; - - // - // Move on to the next FvbInstance - // - FvbInstance =3D (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/SpiFvbServ= iceStandaloneMm.c b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/Spi= FvbServiceStandaloneMm.c deleted file mode 100644 index 252c818d6551..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStan= daloneMm.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 Compatibi= lity Specification. - - Copyright (c) Microsoft Corporation.
- 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_SUCCE= SS. - -**/ -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/SpiFvbServ= iceTraditionalMm.c b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/Sp= iFvbServiceTraditionalMm.c deleted file mode 100644 index 1c2dac70e3c6..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTrad= itionalMm.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 Compatibi= lity Specification. - - Copyright (c) Microsoft Corporation.
- 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_SUCCE= SS. - -**/ -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/SpiFvbServ= iceCommon.h b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbSer= viceCommon.h deleted file mode 100644 index e9d69e985814..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceComm= on.h +++ /dev/null @@ -1,158 +0,0 @@ -/** @file - Common source definitions used in serial flash drivers - -Copyright (c) 2017, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _SPI_FVB_SERVICE_COMMON_H -#define _SPI_FVB_SERVICE_COMMON_H - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -// -// Define two helper macro to extract the Capability field or Status fie= ld 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, F= VB_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/SpiFvbServ= iceMm.h b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbService= Mm.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.
- 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/SpiFvbServ= iceSmm.inf b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServ= iceSmm.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.
-# Copyright (c) Microsoft Corporation.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -### - -[Defines] - INF_VERSION =3D 0x00010017 - BASE_NAME =3D SpiFvbServiceSmm - FILE_GUID =3D 68A10D85-6858-4402-B070-028B3EA2174= 7 - VERSION_STRING =3D 1.0 - MODULE_TYPE =3D DXE_SMM_DRIVER - PI_SPECIFICATION_VERSION =3D 1.10 - ENTRY_POINT =3D SpiFvbTraditionalMmInitialize - -# -# The following information is for reference only and not required by th= e build tools. -# -# VALID_ARCHITECTURES =3D 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 ## CONS= UMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONS= UMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONS= UMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONS= UMES - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase ## CONS= UMES - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize ## CONS= UMES - -[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/SpiFvbServ= iceStandaloneMm.inf b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/S= piFvbServiceStandaloneMm.inf deleted file mode 100644 index 9f08d3673f41..000000000000 --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStan= daloneMm.inf +++ /dev/null @@ -1,67 +0,0 @@ -### @file -# Component description file for the Serial Flash device Standalone MM d= river. -# -# Copyright (c) 2017-2019, Intel Corporation. All rights reserved.
-# Copyright (c) Microsoft Corporation.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -### - -[Defines] - INF_VERSION =3D 0x0001001B - BASE_NAME =3D SpiFvbServiceStandaloneMm - FILE_GUID =3D E6313655-8BD0-4EAB-B319-AD5E212CE6A= B - VERSION_STRING =3D 1.0 - MODULE_TYPE =3D MM_STANDALONE - PI_SPECIFICATION_VERSION =3D 0x00010032 - ENTRY_POINT =3D SpiFvbStandaloneMmInitialize - -# -# The following information is for reference only and not required by th= e build tools. -# -# VALID_ARCHITECTURES =3D 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 ## CONS= UMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONS= UMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONS= UMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONS= UMES - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase ## CONS= UMES - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize ## CONS= UMES - -[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 58ee4cb85c69..d43131bf9cec 100644 --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc @@ -162,8 +162,6 @@ [Components] MinPlatformPkg/Bds/Library/BoardBootManagerLibNull/BoardBootManagerLib= Null.inf MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootMa= nagerLib.inf =20 - MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf - MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf MinPlatformPkg/Flash/Library/SpiFlashCommonLibNull/SpiFlashCommonLibNu= ll.inf =20 MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryConfig.inf --=20 2.28.0.windows.1