From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web09.8809.1621414210236203320 for ; Wed, 19 May 2021 01:50:10 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=oTAgSbST; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: chasel.chiu@intel.com) IronPort-SDR: ccBGzmGbEyTziWPXeETpQ3CbJzyxykJyf49X/UV6v6snYhg6hPAthGqi8q9kZnadrV9uWJeLsF RnoaS5YsJGuQ== X-IronPort-AV: E=McAfee;i="6200,9189,9988"; a="286457164" X-IronPort-AV: E=Sophos;i="5.82,312,1613462400"; d="scan'208";a="286457164" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 May 2021 01:50:05 -0700 IronPort-SDR: hOknpzfT1VavY9LydU5sJ8tx+R1UKSoFrmYl2uTrY7O09jWx/yZ0GoyJ+8Tuqc6RdVnj+1N0Nb SLc9HmuylLqA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,312,1613462400"; d="scan'208";a="544469992" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga004.jf.intel.com with ESMTP; 19 May 2021 01:50:04 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Wed, 19 May 2021 01:50:04 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Wed, 19 May 2021 01:50:04 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.170) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Wed, 19 May 2021 01:50:03 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tg8IbDU4xvQWmajFdlz5NMAGGuxq9SBgKuf6ySD7fglYX+SOVGvSmQs32hFKt5TJ79q2EEuFI4xoEF2yL2lwv4+/h2DbscAf6X7h9zX8GVXWJ0kWAuasARC6zxYiw96C2H81BZYYj/aiojeLArmcZ6deXPF4UpciAoFieF6Gq9frLqJsrFT498Ql2XO8yPuzzBDBb+0FdcPTy9F0kLJ5JeEhQWjBrME4IV9CnfEyzVTuUK18UvNNc20QhsdKSKaRxrJp45tyl0ThxEVavhLkofHy7I6ti4/cZVuyq8rFTEytLMlBIJI2TVGlnFDAbb1oEGH9KmGHnwaLdK3MJ9e1uQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vdJELyXrxbrzbxReiBkEt0s5YV+Nsfn5idc2Mhydv0g=; b=EBEDiESvxFFN2oYjjOfQc6WViCsGsnzdqREqA1DYJIsRezeEbwW5XojjmKbOSgLr3qkBzjoV0RdbqaPm3cJ5V0NBHobEJFG5A5EJYgnlkjuJr+w7Bn4krD1OC5lJqjKMiVWSQOCmeNU2j47QRefJ2dCt76+v08CvTo2UyCrWGuNptd13xHp4e91NKnBsnowUIRMB8GQehLHrZuAd9xmqw0Fvr4fhRi0wUX6xPSMVwu05Qf5v7NIQFx4sCBY/vD2+ym/msBtGI9cnkvPEe9cQW5HYyRVYVbJleshjwyOdtlB1d+uwnL7a/tuGKxJNlJsEH5swm9HNVknxkWnnAIXWQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vdJELyXrxbrzbxReiBkEt0s5YV+Nsfn5idc2Mhydv0g=; b=oTAgSbSTYy+brF5oFoBB4zXoLImb3FOVhAu9Ql22V9cAyHYRs7MZ+6YiL/Jy6lJF8c6/CZsz7b61g3yUl30lMA1nvgktcdchPWKdqYacUva5miN4aiq8zsxNkd3SXYNH7hY1dDKh42ULrXbkv5Zx0O/xLn43FFwwEzT9BBWdWwo= Received: from SN6PR11MB2814.namprd11.prod.outlook.com (2603:10b6:805:55::15) by SA2PR11MB5147.namprd11.prod.outlook.com (2603:10b6:806:118::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25; Wed, 19 May 2021 08:50:01 +0000 Received: from SN6PR11MB2814.namprd11.prod.outlook.com ([fe80::6157:b65c:53b6:a320]) by SN6PR11MB2814.namprd11.prod.outlook.com ([fe80::6157:b65c:53b6:a320%6]) with mapi id 15.20.4129.033; Wed, 19 May 2021 08:50:01 +0000 From: "Chiu, Chasel" To: "mikuback@linux.microsoft.com" , "devel@edk2.groups.io" CC: "Desimone, Nathaniel L" , Liming Gao , "Dong, Eric" Subject: Re: [edk2-platforms][PATCH v2 25/35] MinPlatformPkg: Remove SpiFvbService modules Thread-Topic: [edk2-platforms][PATCH v2 25/35] MinPlatformPkg: Remove SpiFvbService modules Thread-Index: AQHXTGObeCgqEee/WEur5mAnIZRC+arqfxBg Date: Wed, 19 May 2021 08:50:01 +0000 Message-ID: References: <20210519035947.1234-1-mikuback@linux.microsoft.com> <20210519035947.1234-26-mikuback@linux.microsoft.com> In-Reply-To: <20210519035947.1234-26-mikuback@linux.microsoft.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: linux.microsoft.com; dkim=none (message not signed) header.d=none;linux.microsoft.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [114.43.45.8] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ce89b806-bce1-4c02-df26-08d91aa316f7 x-ms-traffictypediagnostic: SA2PR11MB5147: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: b0pZYfM28Z/jWNYqr6V26lmrWchQpiwQNVDn3L5UoSioyQOw0OUzBWjIx17RPUTKU+HJxjBHcDm0D6ofpUUE5rh/GgYKdZvRY6Dl+H6iJspI8Z/Zy4CpsxZ4e/AUynLuTuB6g4Hbkn5GGSTmKNIJe+Sn42l4bFJz0p/NHnncJEVTzGhdYtEDPQ6zvZZoq0pl9cJfjNBaGQBEZD0cjLAMg2q4zXFX3CEVXKlIZv9J4clNE/kq3wrg7lFhgkOHypwvuj3uJvSZY1Azu1nGtHgWN9shQ+iT0W98AvMTwOuW0eq4x5B/YseE8YiONCfE/MBy95Lkvyw/c+bH7av0JiWMH/92PUL8YwP7eUYDr3MZkQ2CPj3RtdOLQuNKxaHmkqFjJGm6V+ke7kpETOJyZLvYJSWeHBptyRKwpQYT+SkcvYndskMY+xpTjo8q+yxIPErvXNcTtYjRNVh+0KymVaj4uTTSCOXcff02j/jFZYvVOg826Q7QIBeZQbN9dRD2BSdUXzaMNg54o2y0KBIbh/N+qKKSJkEuwrTsRh/yOWuoAXr/CcMp9P7VaP0JmSoahC0bz/0nDQi95Iwwk4pe8yotqMBl1j48/AV05bVKS5XcnNC3MHnEKaFFGcH2663I/O9WPa54uYntQMIjVlrr7j8S9fVaqF6B5PH7Oku0pFE9OVVwss5pRqUk5iJy1RLbZ4ip+I/cnMsQNZse4cmrsZEy5isCkqDknTsMFnegUirugR4= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2814.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(396003)(39850400004)(346002)(376002)(45080400002)(6506007)(86362001)(8676002)(186003)(55016002)(53546011)(52536014)(26005)(107886003)(9686003)(478600001)(66446008)(64756008)(83380400001)(66556008)(30864003)(19627235002)(110136005)(66476007)(7696005)(8936002)(76116006)(54906003)(2906002)(66946007)(5660300002)(71200400001)(122000001)(38100700002)(4326008)(33656002)(316002)(11716005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?N4QQwLAUMVP71NxPk2BA7hBuzynUmy4S90hk1xHA98VTyc68Pniz2fuY6D0p?= =?us-ascii?Q?L9dsLmlfCXXLcNrVT7k3+S5g6n2NDU27QEVKvA3HLo5wm6YQIBhZ9V+XFMPh?= =?us-ascii?Q?VfjPznVrYQ+7x0hc3H9nMD+EG3u1/Uhm0ATLFpdb6d2fbSQtZ1dzZQJUN8NL?= =?us-ascii?Q?4AV9li2nLZ9RC6UzQ/VwjcViW6u+e3LsD0sB69Y/9yhV3hDLDTqtQctrGPwb?= =?us-ascii?Q?zw4zTTZcVAk8r1l0ISq4li0YOchduOjRanOfoFB82BVFK0uRNXBA1eRn3fWC?= =?us-ascii?Q?CmKDzVdEO5hPLM+/0gOyWadLecKTt980ZGsIs+8xAIDZiXr6SQ/EtxvbhWiR?= =?us-ascii?Q?iZjRTdx7a59Zs+gg07NCgMztK0jAt87lxcRy939y9e8vAMZoQ9Tzq7xjMjk8?= =?us-ascii?Q?gko7GPEQqmPJVnLtH0MTkn4voFAOxmR/URkrKX94DYSIEyd3asQf/3Jis/dz?= =?us-ascii?Q?4zjtBzcoi6tXSN30BIIDNbhCgnTQyhxWWMCMVoyLwQ0fID4QoD3ok5Y6dsYT?= =?us-ascii?Q?XV/p5z/gu1SuKm2lyEfP6ByHFIC9M4AR8IoePqj9qL+t9Td8C678WK10ecAf?= =?us-ascii?Q?Szxf98cFPRIToxIbsETAEp+zS9hA6A9LDMaIQRQHOOx6xUj0+aev2n2qyUK9?= =?us-ascii?Q?elmfemMabZ4TuGZwSI3KlI+NNhHUcWPab+CPChvQGD7A7nZ6mXIFq9crfIrf?= =?us-ascii?Q?I1ZMttmlJpUy0xBy24K4zLk4qqed+j/fCyebNLaZNAHczLG8vfaFrelnNZaU?= =?us-ascii?Q?/vdc1QBaOvs5AfJqkCPRhjOtGY7q28n9PQwG3riKISrrAlngOLQlBwt7n3jP?= =?us-ascii?Q?bisBxD24PBye6Y4YdF1f4Bsn2Gg5H3BMQuBMOzpC1Z7WBLpvVKbEFjkmgkQm?= =?us-ascii?Q?skB5T/ztTLh6cPwOAzTEjN+najrWOzETKsHxmwpgf6wXkTPUVovnw4JZU55R?= =?us-ascii?Q?4JrfBiJq8b59rWagABkydyyiptV+40O49ClVHnrQCknqD9qWyx0ryJ1cOcGV?= =?us-ascii?Q?fzQCL57+gaYy7UvMzeZrT4qwHSN6+0dOf6SVxxMWICy1lYbNFUidtwiTwALu?= =?us-ascii?Q?X36C2mLPF4mS5QUBnvUtNDrx7s1myVEVpuEYAwt0gR6MPxgN9mzWuraRaiNe?= =?us-ascii?Q?Xd/ct+lyS9Vf8rkJNEt88afDocDuM0eBWr0Dm8W0WPHWKWGuB8tjwPfqP93i?= =?us-ascii?Q?tNloCUAWw+tMlZ/ZNMFAEGfaXAJGF+/OKrRVy6li02br04dVwqmXNhCUtgG7?= =?us-ascii?Q?ceEq411pqY3DrRs0UDQXlCM+oVnBHdlba7eGPiHMXj7uw9PXFF2reUhooSpf?= =?us-ascii?Q?xSQ=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2814.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce89b806-bce1-4c02-df26-08d91aa316f7 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 May 2021 08:50:01.5431 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: JInar/xuQJKaGimQSiaOnbAd6kiueyos3XEHdimpdIz+RaKg1cWXc8rf/c3cZoeVlYyY//lewQnabjBOQeC46Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5147 Return-Path: chasel.chiu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Chasel Chiu > -----Original Message----- > From: mikuback@linux.microsoft.com > Sent: Wednesday, May 19, 2021 12:00 PM > To: devel@edk2.groups.io > Cc: Chiu, Chasel ; Desimone, Nathaniel L > ; Liming Gao ; > Dong, Eric > Subject: [edk2-platforms][PATCH v2 25/35] MinPlatformPkg: Remove > SpiFvbService modules >=20 > From: Michael Kubacki >=20 > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3307 >=20 > SpiFvbServiceSmm and SpiFvbServiceStandaloneMm have moved to > IntelSiliconPkg. >=20 > Cc: Chasel Chiu > Cc: Nate DeSimone > Cc: Liming Gao > Cc: Eric Dong > Signed-off-by: Michael Kubacki > --- > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c = | 94 - > - > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c > | 903 -------------------- > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c > | 271 ------ >=20 > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone= M > m.c | 32 - >=20 > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditiona= lM > m.c | 32 - > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h > | 158 ---- > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h > | 22 - > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > | 68 -- >=20 > Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone= M > m.inf | 67 -- > Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc = | 2 - > 10 files changed, 1649 deletions(-) >=20 > 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(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, 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_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 =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)- > >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", (*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", > (*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 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 > performance issue. > -// > -FV_INFO mPlatformFvBaseAddress[] =3D { > - {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase), > FixedPcdGet32(PcdFlashNvStorageVariableSize)}, > - {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase), > FixedPcdGet32(PcdFlashFvMicrocodeSize)}, > - {0, 0} > -}; > - > -FV_INFO mPlatformDefaultBaseAddress[] =3D { > - {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase), > FixedPcdGet32(PcdFlashNvStorageVariableSize)}, > - {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase), > FixedPcdGet32(PcdFlashFvMicrocodeSize)}, > - {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 > ReadDisabled 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 & > 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) =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, > &gEfiFirmwareFileSystem2Guid, 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 > volume. > - > - @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: > 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 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/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 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 *) > AllocateRuntimeCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH), > &mFvMemmapDevicePathTemplate); > - if (FvbInstance->DevicePath =3D=3D NULL) { > - DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for > MEMMAP_DEVICE_PATH failed\n")); > - return; > - } > - ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)- > >MemMapDevPath.StartingAddress =3D FvbInstance->FvBase; > - ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)- > >MemMapDevPath.EndingAddress =3D FvbInstance->FvBase + FvHeader- > >FvLength - 1; > - } else { > - FvbInstance->DevicePath =3D (EFI_DEVICE_PATH_PROTOCOL *) > AllocateRuntimeCopyPool (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.FvName, > - (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(PcdFlashNvStorageVariableBase); > - mPlatformFvBaseAddress[0].FvSize =3D > PcdGet32(PcdFlashNvStorageVariableSize); > - mPlatformFvBaseAddress[1].FvBase =3D PcdGet32(PcdFlashFvMicrocodeBase)= ; > - mPlatformFvBaseAddress[1].FvSize =3D PcdGet32(PcdFlashFvMicrocodeSize)= ; > - mPlatformDefaultBaseAddress[0].FvBase =3D > PcdGet32(PcdFlashNvStorageVariableBase); > - mPlatformDefaultBaseAddress[0].FvSize =3D > PcdGet32(PcdFlashNvStorageVariableSize); > - mPlatformDefaultBaseAddress[1].FvBase =3D > PcdGet32(PcdFlashFvMicrocodeBase); > - mPlatformDefaultBaseAddress[1].FvSize =3D > 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 =3D 0;; Idx++) { > - if (mPlatformFvBaseAddress[Idx].FvSize =3D=3D 0 && > mPlatformFvBaseAddress[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", > FvHeader)); > - 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, > (UINT8*)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 && > mPlatformFvBaseAddress[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 *) > AllocateRuntimeZeroPool (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 && > mPlatformFvBaseAddress[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/SpiFvbServiceStandalo= ne > Mm.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalo= ne > Mm.c > deleted file mode 100644 > index 252c818d6551..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalo= ne > Mm.c > +++ /dev/null > @@ -1,32 +0,0 @@ > -/** @file > - MM driver source for several Serial Flash devices > - which are compliant with the Intel(R) Serial Flash Interface 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/SpiFvbServiceTraditio= nal > Mm.c > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditio= nal > Mm.c > deleted file mode 100644 > index 1c2dac70e3c6..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditio= nal > Mm.c > +++ /dev/null > @@ -1,32 +0,0 @@ > -/** @file > - MM driver source for several Serial Flash devices > - which are compliant with the Intel(R) Serial Flash Interface 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/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.
> -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, > 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.
> - 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.
> -# 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 ## > 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/SpiFvbServiceStandalo= ne > Mm.inf > b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalo= ne > Mm.inf > deleted file mode 100644 > index 9f08d3673f41..000000000000 > --- > a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalo= ne > Mm.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 ## > 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] >=20 >=20 > MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootM > anagerLib.inf >=20 > - MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf > - MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf >=20 > MinPlatformPkg/Flash/Library/SpiFlashCommonLibNull/SpiFlashCommonLibNull. > inf >=20 > MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryConfig.inf > -- > 2.28.0.windows.1