From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web12.7676.1594303430184664200 for ; Thu, 09 Jul 2020 07:03:50 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=gHe4XRkI; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: liming.gao@intel.com) IronPort-SDR: 4HH5dMoFrRG/YAaQyXESzkteyic5jzLxEAHl7KCKqy0YVzhUOF5FhRGCeyLQ50G8VE+g9HP+Z9 ikrHzOR4VfJQ== X-IronPort-AV: E=McAfee;i="6000,8403,9676"; a="212910401" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="212910401" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 07:03:36 -0700 IronPort-SDR: +CfEkmojFPaujoYjU9xdEmDy8/0epfz7lIsxZ+5EazhMGBdjWzQKMZErfPZTiARrU2oZPyG1JD Kl9Ht58aJ5Wg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="323246392" Received: from orsmsx604.amr.corp.intel.com ([10.22.229.17]) by FMSMGA003.fm.intel.com with ESMTP; 09 Jul 2020 07:03:36 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 9 Jul 2020 07:03:35 -0700 Received: from ORSEDG002.ED.cps.intel.com (10.7.248.5) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 9 Jul 2020 07:03:35 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.173) by edgegateway.intel.com (134.134.137.101) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 9 Jul 2020 07:03:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bP813nXk1/R/8lowI2grZy2eo4SGFEWIuwO4/eu9+fh4RmErNljuuHhM6GpqwX37GbC1e8rcFhbZ6hkjcXROtB4SDg/aOHQYVBi1N8svD3f9uNGhpIij93Divu4L+cjDeg7mf4sAgi7X6cNdlr7jrQjnK8NSTtPkz8GAlh4j5soXB81VXr4fjS+kBYaXbzqs5fRtKKOllddqXcsOLHq314KvJciChtiH1DeUTbS75ZbYOwZl8+29vYRH0J4tvPLQP/ux1KlqpgOUtCyGQ9zHq80AAnRSrT1f7C+RF46FWwRMvDwcb+2kIeozMqewjHaBmWI6aChEHyUOnfUK4pd8iA== 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=tX0F4Y2jQ58DZ9N1v4eAmqjCjNNCTePVYxeyLusiiZ8=; b=VMbWiz3szc5ZN77UgZQBPRoRDs9YLwX9/Ts5gig+SAtsivoOVp0ZoZHPrCOwb9w5s9jFwj0LZpxvm5F+OS0/r+sHlve7eOq29jSfMnI5L66aZbXvtGL64nUFt++iskn6tZ/i2s9Ie5BIQdoxANibbNiM7ZpRgapvogfXfIZor/3SanSvXTihur7ZiRpOkPIUA9l+8seehdzoxosHpMyPk0qEXKcDtRH53BDtTCuDGSMJSQDK7K3ODHBb7ybypOXFENjQNkfsxVI+Vphue5j4HaY3tDBspmsOcJw9vm91J6fPocGtDkVStmu4+RtNouPRPpc4IyCop5DO2M0T7qTkOA== 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=tX0F4Y2jQ58DZ9N1v4eAmqjCjNNCTePVYxeyLusiiZ8=; b=gHe4XRkIPXdy+x2qE8buUYcVCvaR+OpL3odWk+8ddjCzuy0vC5OL972qcSjRtuiZTVl9R783yOdkOT6KYeWW5xD7bMDBgd4WkG66VbLUXU1IyGgiXjWoseYpD1XVz3Hi2lCQhdR2oJvNTleR4GqVCJ4vtGDnWAvSbZpnlbyKRLE= Received: from MWHPR11MB1630.namprd11.prod.outlook.com (2603:10b6:301:e::7) by MW3PR11MB4683.namprd11.prod.outlook.com (2603:10b6:303:5c::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3174.22; Thu, 9 Jul 2020 14:03:32 +0000 Received: from MWHPR11MB1630.namprd11.prod.outlook.com ([fe80::7847:b564:1b55:b67e]) by MWHPR11MB1630.namprd11.prod.outlook.com ([fe80::7847:b564:1b55:b67e%6]) with mapi id 15.20.3174.021; Thu, 9 Jul 2020 14:03:32 +0000 From: "Liming Gao" To: "Kinney, Michael D" , "devel@edk2.groups.io" CC: Sean Brogan , Bret Barkelew , "Yao, Jiewen" Subject: Re: [Patch 03/15] MdePkg/BaseCacheMaintenanceLibNull: Add Null instance for host testing Thread-Topic: [Patch 03/15] MdePkg/BaseCacheMaintenanceLibNull: Add Null instance for host testing Thread-Index: AQHWQqqovK0vzFG/mkCMCffF35eC5aj/bhqg Date: Thu, 9 Jul 2020 14:03:32 +0000 Message-ID: References: <20200615001918.22164-1-michael.d.kinney@intel.com> <20200615001918.22164-4-michael.d.kinney@intel.com> In-Reply-To: <20200615001918.22164-4-michael.d.kinney@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.2.0.6 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.213] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b3cbc47d-cb06-4283-0a3d-08d82410dd88 x-ms-traffictypediagnostic: MW3PR11MB4683: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3276; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UaJi7I3ahYEJSjKjD87qUhCut460WX5t749JoKRLErmalpM8ccW8drI3sHKFR/fO7W6W6sMBJD4MrJQJ6e4Sp5/eeOlUDSiI4kidkSs3OW4OatdbYjfMbQKZkNhS/ijb5EtFIg2TjmEL7fXlG461AkIEe9i+wFGkepsdLkg6CapiBJyT4ZrognxUngHDus/1MohVhkvonnYuiQ5NwqtHCrp9TMe5Op3ZwZ7dPU8/r3vc9ejguVZV4BpokYQuUVmsKQ0xhsDnY/YyslkH7LnjRpIoNchjBRGbWzYbztkTOv1K0qz7kG6fY/liv9kJjW9bg1ZZ1mXOPNh3A5GpyNsQcUQaWnGxwO4Q5mWPZPBgnEcBlWFhFSzfA5B2fToeABXsWZeSsAEpnbOtOTNVA+krvYt5uqWN49UZPCAW3YjOGPmGJTcfI+rOjVpdrTk90TnUF06WebfG7tQbp6+p7tAG/w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1630.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(136003)(346002)(396003)(366004)(376002)(39860400002)(53546011)(66946007)(86362001)(76116006)(83380400001)(8676002)(66446008)(64756008)(66476007)(66556008)(107886003)(52536014)(110136005)(55016002)(316002)(33656002)(186003)(54906003)(26005)(2906002)(71200400001)(6506007)(7696005)(9686003)(4326008)(966005)(8936002)(5660300002)(30864003)(478600001)(213903007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: Bi5SERUT4jtS+Kd2ij/xkCZncJiz9GIpWA8RURwkZJiXpe9c63skrEjKgs8t9vdTXPNtSvPROIDsHRhEmG+554kNHKi4/kBvMqPUOumaPIM2uWxgFknMswRWfNGmV88a+6nK0Vah95I0/baXL5/rvH7cGvotw69SJY58ft8cYBlGraSnqs1Isckufqi+GIurDA6XX3AFbV6UPz9xc/FIDqkiV67TEvMyadB5Xxqm9599UW/ezb/1AqtiaRuRJhWKYppTOE1E5ALpl/RBa+MPbEtfBVoVZFZ89ABQ9HyskLCr/8K1DDmwGQWkxTig/rHZUlqNwFevVP4Olv5xlCMMkl4J2CXVZqrY6MVaQIvCUyq+xr2bw+xtjbmcsAu13S2NvuuehR4zY5H24bN8RjZDuXGs1eyYuFcVg9HVomllI0TEQQ0rfoYDkIPVSLeBEvz9iU+IGMICWIvjtDXfOvZdPFJinRIJEtO0sosmRdgdoQ6+mh8hw7qZn8jzKOHAi5pN MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1630.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3cbc47d-cb06-4283-0a3d-08d82410dd88 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jul 2020 14:03:32.6392 (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: i/eDKiDnM5go/XZB5E3LsktDdF8zsrtQE//hlmM2ozmwrRK5s07ikMM1D+NDE3pPjH3JxElgAg8kQdSYDtjx+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4683 Return-Path: liming.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao > -----Original Message----- > From: Kinney, Michael D > Sent: Monday, June 15, 2020 8:19 AM > To: devel@edk2.groups.io > Cc: Gao, Liming ; Sean Brogan ; Bret Barkelew ; > Yao, Jiewen > Subject: [Patch 03/15] MdePkg/BaseCacheMaintenanceLibNull: Add Null insta= nce for host testing >=20 > https://bugzilla.tianocore.org/show_bug.cgi?id=3D2799 >=20 > The services in CacheMaintenanceLib usually generate exceptions in a > unit test host application. Provide a Null instance that can be safely > used. >=20 > This Null instance can also be used as a template for implementing > new instances of CacheMaintenanceLib. >=20 > Cc: Liming Gao > Cc: Sean Brogan > Cc: Bret Barkelew > Cc: Jiewen Yao > Signed-off-by: Michael D Kinney > --- > .../BaseCacheMaintenanceLibNull.c | 225 ++++++++++++++++++ > .../BaseCacheMaintenanceLibNull.inf | 29 +++ > .../BaseCacheMaintenanceLibNull.uni | 12 + > MdePkg/MdePkg.dsc | 1 + > 4 files changed, 267 insertions(+) > create mode 100644 MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheM= aintenanceLibNull.c > create mode 100644 MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheM= aintenanceLibNull.inf > create mode 100644 MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheM= aintenanceLibNull.uni >=20 > diff --git a/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintena= nceLibNull.c > b/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull.= c > new file mode 100644 > index 0000000000..fd5b9d4710 > --- /dev/null > +++ b/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibN= ull.c > @@ -0,0 +1,225 @@ > +/** @file > + Null Cache Maintenance Librfary implementation. > + > + Copyright (c) 2020, Intel Corporation. All rights reserved.
> + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include > +#include > + > +/** > + Invalidates the entire instruction cache in cache coherency domain of = the > + calling CPU. > + > +**/ > +VOID > +EFIAPI > +InvalidateInstructionCache ( > + VOID > + ) > +{ > +} > + > +/** > + Invalidates a range of instruction cache lines in the cache coherency = domain > + of the calling CPU. > + > + Invalidates the instruction cache lines specified by Address and Lengt= h. If > + Address is not aligned on a cache line boundary, then entire instructi= on > + cache line containing Address is invalidated. If Address + Length is n= ot > + aligned on a cache line boundary, then the entire instruction cache li= ne > + containing Address + Length -1 is invalidated. This function may choos= e to > + invalidate the entire instruction cache if that is more efficient than > + invalidating the specified range. If Length is 0, then no instruction = cache > + lines are invalidated. Address is returned. > + > + If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT(). > + > + @param Address The base address of the instruction cache lines to > + invalidate. If the CPU is in a physical addressing mod= e, then > + Address is a physical address. If the CPU is in a virt= ual > + addressing mode, then Address is a virtual address. > + > + @param Length The number of bytes to invalidate from the instruction= cache. > + > + @return Address. > + > +**/ > +VOID * > +EFIAPI > +InvalidateInstructionCacheRange ( > + IN VOID *Address, > + IN UINTN Length > + ) > +{ > + ASSERT (Length <=3D MAX_ADDRESS - (UINTN)Address + 1); > + return Address; > +} > + > +/** > + Writes back and invalidates the entire data cache in cache coherency d= omain > + of the calling CPU. > + > + Writes back and invalidates the entire data cache in cache coherency d= omain > + of the calling CPU. This function guarantees that all dirty cache line= s are > + written back to system memory, and also invalidates all the data cache= lines > + in the cache coherency domain of the calling CPU. > + > +**/ > +VOID > +EFIAPI > +WriteBackInvalidateDataCache ( > + VOID > + ) > +{ > +} > + > +/** > + Writes back and invalidates a range of data cache lines in the cache > + coherency domain of the calling CPU. > + > + Writes Back and Invalidate the data cache lines specified by Address a= nd > + Length. If Address is not aligned on a cache line boundary, then entir= e data > + cache line containing Address is written back and invalidated. If Addr= ess + > + Length is not aligned on a cache line boundary, then the entire data c= ache > + line containing Address + Length -1 is written back and invalidated. T= his > + function may choose to write back and invalidate the entire data cache= if > + that is more efficient than writing back and invalidating the specifie= d > + range. If Length is 0, then no data cache lines are written back and > + invalidated. Address is returned. > + > + If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT(). > + > + @param Address The base address of the data cache lines to write back= and > + invalidate. If the CPU is in a physical addressing mod= e, then > + Address is a physical address. If the CPU is in a virt= ual > + addressing mode, then Address is a virtual address. > + @param Length The number of bytes to write back and invalidate from = the > + data cache. > + > + @return Address of cache invalidation. > + > +**/ > +VOID * > +EFIAPI > +WriteBackInvalidateDataCacheRange ( > + IN VOID *Address, > + IN UINTN Length > + ) > +{ > + ASSERT (Length <=3D MAX_ADDRESS - (UINTN)Address + 1); > + return Address; > +} > + > +/** > + Writes back the entire data cache in cache coherency domain of the cal= ling > + CPU. > + > + Writes back the entire data cache in cache coherency domain of the cal= ling > + CPU. This function guarantees that all dirty cache lines are written b= ack to > + system memory. This function may also invalidate all the data cache li= nes in > + the cache coherency domain of the calling CPU. > + > +**/ > +VOID > +EFIAPI > +WriteBackDataCache ( > + VOID > + ) > +{ > +} > + > +/** > + Writes back a range of data cache lines in the cache coherency domain = of the > + calling CPU. > + > + Writes back the data cache lines specified by Address and Length. If A= ddress > + is not aligned on a cache line boundary, then entire data cache line > + containing Address is written back. If Address + Length is not aligned= on a > + cache line boundary, then the entire data cache line containing Addres= s + > + Length -1 is written back. This function may choose to write back the = entire > + data cache if that is more efficient than writing back the specified r= ange. > + If Length is 0, then no data cache lines are written back. This functi= on may > + also invalidate all the data cache lines in the specified range of the= cache > + coherency domain of the calling CPU. Address is returned. > + > + If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT(). > + > + @param Address The base address of the data cache lines to write back= . If > + the CPU is in a physical addressing mode, then Address= is a > + physical address. If the CPU is in a virtual addressin= g > + mode, then Address is a virtual address. > + @param Length The number of bytes to write back from the data cache. > + > + @return Address of cache written in main memory. > + > +**/ > +VOID * > +EFIAPI > +WriteBackDataCacheRange ( > + IN VOID *Address, > + IN UINTN Length > + ) > +{ > + ASSERT (Length <=3D MAX_ADDRESS - (UINTN)Address + 1); > + return Address; > +} > + > +/** > + Invalidates the entire data cache in cache coherency domain of the cal= ling > + CPU. > + > + Invalidates the entire data cache in cache coherency domain of the cal= ling > + CPU. This function must be used with care because dirty cache lines ar= e not > + written back to system memory. It is typically used for cache diagnost= ics. If > + the CPU does not support invalidation of the entire data cache, then a= write > + back and invalidate operation should be performed on the entire data c= ache. > + > +**/ > +VOID > +EFIAPI > +InvalidateDataCache ( > + VOID > + ) > +{ > +} > + > +/** > + Invalidates a range of data cache lines in the cache coherency domain = of the > + calling CPU. > + > + Invalidates the data cache lines specified by Address and Length. If A= ddress > + is not aligned on a cache line boundary, then entire data cache line > + containing Address is invalidated. If Address + Length is not aligned = on a > + cache line boundary, then the entire data cache line containing Addres= s + > + Length -1 is invalidated. This function must never invalidate any cach= e lines > + outside the specified range. If Length is 0, then no data cache lines = are > + invalidated. Address is returned. This function must be used with care > + because dirty cache lines are not written back to system memory. It is > + typically used for cache diagnostics. If the CPU does not support > + invalidation of a data cache range, then a write back and invalidate > + operation should be performed on the data cache range. > + > + If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT(). > + > + @param Address The base address of the data cache lines to invalidate= . If > + the CPU is in a physical addressing mode, then Address= is a > + physical address. If the CPU is in a virtual addressin= g mode, > + then Address is a virtual address. > + @param Length The number of bytes to invalidate from the data cache. > + > + @return Address. > + > +**/ > +VOID * > +EFIAPI > +InvalidateDataCacheRange ( > + IN VOID *Address, > + IN UINTN Length > + ) > +{ > + ASSERT (Length <=3D MAX_ADDRESS - (UINTN)Address + 1); > + return Address; > +} > diff --git a/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintena= nceLibNull.inf > b/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull.= inf > new file mode 100644 > index 0000000000..8d6eaaeaa0 > --- /dev/null > +++ b/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibN= ull.inf > @@ -0,0 +1,29 @@ > +## @file > +# Null Cache Maintenance Library implementation. > +# > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
> +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D BaseCacheMaintenanceLibNull > + MODULE_UNI_FILE =3D BaseCacheMaintenanceLibNull.uni > + FILE_GUID =3D 13F13249-AC31-4373-8B2B-AFC5755A6FC= D > + MODULE_TYPE =3D BASE > + VERSION_STRING =3D 1.1 > + LIBRARY_CLASS =3D CacheMaintenanceLib > + > +# > +# VALID_ARCHITECTURES =3D IA32 X64 EBC ARM AARCH64 > +# > + > +[Sources] > + BaseCacheMaintenanceLibNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + > +[LibraryClasses] > + DebugLib > diff --git a/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintena= nceLibNull.uni > b/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull.= uni > new file mode 100644 > index 0000000000..260c756190 > --- /dev/null > +++ b/MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibN= ull.uni > @@ -0,0 +1,12 @@ > +// /** @file > +// Null Cache Maintenance Library implementation. > +// > +// Copyright (c) 2020, Intel Corporation. All rights reserved.
> +// SPDX-License-Identifier: BSD-2-Clause-Patent > +// > +// **/ > + > +#string STR_MODULE_ABSTRACT #language en-US "Null instance o= f Cache Maintenance Library" > + > +#string STR_MODULE_DESCRIPTION #language en-US "Null instance o= f the Cache Maintenance Library." > + > diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc > index 3abe65ec7f..472fa37774 100644 > --- a/MdePkg/MdePkg.dsc > +++ b/MdePkg/MdePkg.dsc > @@ -35,6 +35,7 @@ [LibraryClasses] > [Components] > MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf > MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf > + MdePkg/Library/BaseCacheMaintenanceLibNull/BaseCacheMaintenanceLibNull= .inf > MdePkg/Library/BaseCpuLib/BaseCpuLib.inf > MdePkg/Library/BaseCpuLibNull/BaseCpuLibNull.inf > MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf > -- > 2.21.0.windows.1