From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0620.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe46::620]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 23DCB2194EB5C for ; Fri, 14 Apr 2017 07:10:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=nXUXbWiP4OaobwVmSFMOrtGL9SuEINRsDq7fFfcGXqo=; b=oMqetzPnXtuiEG/7dKgn+w8HnCrE8eOjhXrBq/Wt98lU3O+9nBxXEGaVCy2rGXXGfB+6UBqezF28sBh6jXEgQBJMLh1mN2tn3ipHf1MbY05D3V7mTcf4/sWpcqm2k9yi4kuveodSRpSg1AjLRty5GO5vLH9aWSSEs+yQmUzEl4c= Received: from DM5PR12MB1243.namprd12.prod.outlook.com (10.168.237.22) by DM5PR1201MB0138.namprd12.prod.outlook.com (10.174.106.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1019.17; Fri, 14 Apr 2017 14:10:11 +0000 Received: from DM5PR12MB1243.namprd12.prod.outlook.com ([10.168.237.22]) by DM5PR12MB1243.namprd12.prod.outlook.com ([10.168.237.22]) with mapi id 15.01.1034.013; Fri, 14 Apr 2017 14:10:09 +0000 From: "Duran, Leo" To: "'Yao, Jiewen'" , "Zeng, Star" , Laszlo Ersek , "Kinney, Michael D" , "edk2-devel@ml01.01.org" CC: "Tian, Feng" , "Singh, Brijesh" Thread-Topic: [edk2] [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL Thread-Index: AQHSs76MLkQIdnpq4U2h4aFYdb9TEqHCFYwAgAAL9oCAAA7ggIAASkIAgAAVDoCAAAPnYIAAA4qAgAAAagCAAAaugIACS0hg Date: Fri, 14 Apr 2017 14:10:09 +0000 Message-ID: References: <1492023400-16132-1-git-send-email-leo.duran@amd.com> <1492023400-16132-2-git-send-email-leo.duran@amd.com> <0C09AFA07DD0434D9E2A0C6AEB0483103B87A294@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503A92B894@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503A92B906@shsmsx102.ccr.corp.intel.com> In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503A92B906@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=amd.com; x-originating-ip: [165.204.77.1] x-microsoft-exchange-diagnostics: 1; DM5PR1201MB0138; 7:N6vFtNgRALoVXYnsQ6ubu28TuuKMadkHeov7V3EntWVRHB97AIm2wPCGozXyTOQ+hC+xyjETsI1ivHfoGB15bIG9QfKevCsCmqpTNoR+HPpSZiVnAhx4AtHQPYvUJ6cxA0afKUbFa75C05FNMZ6ThzNbXM0pPSo0CGZp9WGbdKBKaXGGyIf/YN84H2rKVccy7Wv6Xw5a/zkoqL3+XjLc5kaQdXxVzQdka6TWZpe+Ssqc5KykICU9meE7BsnP0hxaphqdW6ii8qxawa+FgwmAhwSr2IA1IiEV0T8JX7kyCgpoHwWM3v34pX3cvM9vs5IIhGxCf/9UpgwSX1LP9BdCfQ==; 20:OOGcPEJa1rKF+bUTcb/JJ+0Trdk4BYT2pbTX9BbF/XWrndUs//lU8vGA8GWH2NQigHMqlIqz+0oMGqxdM1ZAm0zsy8wJvgGgKJUhZ4CqjtgDKW97RlAHl/SmK/R/X8niWzl/lJ0H8Nna0OPnPu6njBDb56URH7+kVhiVSeEhLPjYSs4Sx1pFUewBqR6ncF441TF1QrU4JZ2TzP5U4VspCEKhAmEFVwoWfvncILAQ980ULtOwCB6kHpZTuWYxolWz x-forefront-antispam-report: SFV:SKI; SCL:-1SFV:NSPM; SFS:(10009020)(39850400002)(39400400002)(39410400002)(39450400003)(39860400002)(39840400002)(24454002)(13464003)(377454003)(76176999)(3660700001)(3280700002)(7696004)(4326008)(2906002)(33656002)(53546009)(25786009)(50986999)(74316002)(6116002)(54356999)(102836003)(236005)(3846002)(55016002)(77096006)(966004)(790700001)(54075001)(2950100002)(7736002)(53376002)(6246003)(53936002)(66066001)(6306002)(6506006)(54906002)(53946003)(99286003)(2501003)(6436002)(54896002)(38730400002)(606005)(7906003)(9686003)(86362001)(189998001)(93886004)(229853002)(122556002)(2900100001)(8936002)(81166006)(16799955002)(575784001)(15188155005)(5660300001)(8676002)(559001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR1201MB0138; H:DM5PR12MB1243.namprd12.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; x-ms-office365-filtering-correlation-id: b7cd401e-76f7-4cec-99ad-08d4833ff5fe x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(48565401081)(201703131423075)(201703031133081)(201702281549075); SRVR:DM5PR1201MB0138; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(767451399110)(162533806227266)(21748063052155)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123564025)(20161123555025)(20161123560025)(20161123562025)(6072148); SRVR:DM5PR1201MB0138; BCL:0; PCL:0; RULEID:; SRVR:DM5PR1201MB0138; x-forefront-prvs: 02778BF158 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Apr 2017 14:10:09.6621 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0138 X-Content-Filtered-By: Mailman/MimeDel 2.1.22 Subject: Re: [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Apr 2017 14:10:13 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable All, Let's please drop this patch for now... We're evaluating Yao's suggestion (= which looks OK so far). Thanks, Leo. From: Yao, Jiewen [mailto:jiewen.yao@intel.com] Sent: Wednesday, April 12, 2017 10:06 PM To: Duran, Leo ; Zeng, Star ; Laszl= o Ersek ; Kinney, Michael D = ; edk2-devel@ml01.01.org Cc: Tian, Feng ; Singh, Brijesh ; Yao, Jiewen Subject: RE: [edk2] [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_P= ROTOCOL Yes, exactly. I hope the default path be as simple as possible. Then we only need update the page table in the corner case. Thank you Yao Jiewen From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Dura= n, Leo Sent: Thursday, April 13, 2017 10:44 AM To: Yao, Jiewen >; Zeng, = Star >; Laszlo Ersek >; Kinney, Michael D >; edk2-devel@ml01.01.org Cc: Tian, Feng >; Singh, Br= ijesh > Subject: Re: [edk2] [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_P= ROTOCOL From: Yao, Jiewen [mailto:jiewen.yao@intel.com] Sent: Wednesday, April 12, 2017 9:40 PM To: Duran, Leo >; Zeng, Star >; Laszlo Ersek >; Kinney, Michael D >; edk2-devel@ml01.01.org Cc: Tian, Feng >; Singh, Br= ijesh >; Yao, Jiewen > Subject: RE: [edk2] [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_P= ROTOCOL Hi Leo Can we clear SEC for all non-DRAM region, instead of MMIO region? Then we do not need worried about 'ADD' MMIO. [Duran, Leo] Ummh... Let me check with Brijesh. I guess you're suggesting a one-time deal, done once page tables are create= d. Thank you Yao Jiewen From: Duran, Leo [mailto:leo.duran@amd.com] Sent: Thursday, April 13, 2017 10:35 AM To: Zeng, Star >>; Laszlo Ersek >>; Kinney, Michael D >>; edk2-devel@ml01.01.org> Cc: Tian, Feng >>; Singh, Brijesh >>; Yao, Jiewen >= > Subject: RE: [edk2] [PATCH] MdeModulePkg: Add EFI_GCD_MEMORY_SPACE_NOTIFY_P= ROTOCOL Hi Star, At DxeIpl time we only have the MMIO regions published by descriptor HOB's = built during PEI. But we also need to capture MMIO regions that may be 'added' by DXE drivers= (e.g., PciHostBridgeDxe), ideally without making changes to those drivers. So our thinking is that trapping the 'Add' MMIO requests that come into GCD= would be a good place to capture what we need. Thanks, Leo. > -----Original Message----- > From: Zeng, Star [mailto:star.zeng@intel.com] > Sent: Wednesday, April 12, 2017 9:14 PM > To: Duran, Leo >>; Laszlo Ersek >>; > Kinney, Michael D >>; edk2-devel@ml01.01.org> > Cc: Tian, Feng >>; Singh, Brijesh > >>; Yao, Jiewen >>; Zeng, Star > >> > Subject: RE: [edk2] [PATCH] MdeModulePkg: Add > EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL > > Does the solution Jiewen proposed at https://lists.01.org/pipermail/edk2- > devel/2017-March/008987.html also work for this case similarly? > > Thanks, > Star > -----Original Message----- > From: Kinney, Michael D > Sent: Thursday, April 13, 2017 8:59 AM > To: Laszlo Ersek >>; Leo Duran = >>; > edk2-devel@ml01.01.org>; Kinney, Michael D >> > Cc: Tian, Feng >>; Brijesh Singh > >>; Zeng, Star >> > Subject: RE: [edk2] [PATCH] MdeModulePkg: Add > EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL > > Hi Laszlo and Leo, > > If you look at the CpuSetMemoryAttributes() function in > UefiCpuPkg/CpuDxe/CpuDxe.c, you will see it now calls > AssignMemoryPageAttributes() at the end. This function is implemented in > UefiCpuPkg/CpuDxe/CpuPageTable.c and it updates page table attributes > based on the request. > > This looks like a very similar action to update PTEs. > > What MMIO areas are we discussing here? MMIO ranges associated with PCI > BARs allocated through PCI Bus Driver and PCI Host Bridge driver? > > Mike > > > -----Original Message----- > > From: Laszlo Ersek [mailto:lersek@redhat.com] > > Sent: Wednesday, April 12, 2017 1:33 PM > > To: Kinney, Michael D >>; Leo Duran > > >>; edk2-devel@ml01.01.org> > > Cc: Tian, Feng >>; Brijesh Singh > > >>; Zeng, Star >> > > Subject: Re: [edk2] [PATCH] MdeModulePkg: Add > > EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL > > > > Mike, > > > > On 04/12/17 21:39, Kinney, Michael D wrote: > > > Hi Leo, > > > > > > DXE Main is supposed to use Arch Protocols for platform specific > behavior. > > > > > > In this case, can the CPU Arch Protocol SetMemoryAttributes() > > > function be used to customize behavior? > > > > > > In other modules that add/remove/modify MMIO, > > > gDS->SetMemorySpaceAttributes() Is called to set memory space > > > attributed such as cachability. Can the module that is > > > adding/removing memory regions from GCD also call > > > gDS-> SetMemorySpaceAttributes() so a CPU specific module can > > > gDS-> perform > > > extra actions? > > > > The goal is to clear the "C" bit in the PTEs (--> disable encryption > > in SEV guests) for all MMIO areas in the GCD memory space map, when > > they are added, and to re-set the "C" bit when the area is removed (or > > the area's GCD type is changed to something non-MMIO). > > > > This behavior should cover all possible gDS->AddMemorySpace() calls > > (for the MMIO type), regardless of what driver calls gDS- > >AddMemorySpace(). > > In other words, drivers that add MMIO space should remain unaware of > > SEV / the "C" bit in PTEs. Otherwise we'd have to enable SEV detection > > and "C" bit massaging in every affected driver individually (even > > future ones, possibly pulled in from under MdeModulePkg or UefiCpuPkg). > > Cacheability and similar attributes for memory ranges are quite > > universal on all architectures, and it is okay to expect all drivers > > to manage those attributes manually (whenever that's necessary), but > > (a) SEV / memory encryption is not that universal, and (b) clearing > > "C" for MMIO ranges affects all drivers alike, so it would be good to > > generalize it at a low level. > > > > What would be the best general location or API to hook the "C" bit > > manipulation into MMIO GCD memory space addition / removal? > > > > Thank you, > > Laszlo > > > > > > > > > > Thanks, > > > > > > Mike > > > > > > > > > > > >> -----Original Message----- > > >> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf > > >> Of Leo > > Duran > > >> Sent: Wednesday, April 12, 2017 11:57 AM > > >> To: edk2-devel@ml01.01.org> > > >> Cc: Laszlo Ersek >>; Tian, Feng > > >> >>; Leo > > Duran > > >> >>; Brijesh Singh >>; Zeng, > > >> Star >> > > >> Subject: [edk2] [PATCH] MdeModulePkg: Add > > >> EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL > > >> > > >> GCD consumes the protocol to issue a Notify() on Add/Remove > operations. > > >> > > >> The intended use-case is to allow OvmfPkg take actions on behalf of > > >> an SEV-enabled guest. > > >> > > >> The new protocol is simply added to the list of optional protocols > > >> handled by DxeMain, and as such leverages the existing > DxeProtocolNotify framework. > > >> > > >> Cc: Feng Tian >> > > >> Cc: Star Zeng >> > > >> Cc: Laszlo Ersek >> > > >> Cc: Brijesh Singh >> > > >> Contributed-under: TianoCore Contribution Agreement 1.0 > > >> Signed-off-by: Leo Duran >> > > >> --- > > >> MdeModulePkg/Core/Dxe/DxeMain.h | 10 +++- > > >> MdeModulePkg/Core/Dxe/DxeMain.inf | 4 ++ > > >> MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 7 +++ > > >> MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c | 9 ++- > > >> MdeModulePkg/Core/Dxe/Gcd/Gcd.c | 8 +++ > > >> .../Include/Protocol/GcdMemorySpaceNotify.h | 65 > > ++++++++++++++++++++++ > > >> MdeModulePkg/MdeModulePkg.dec | 3 + > > >> 7 files changed, 100 insertions(+), 6 deletions(-) create mode > > >> 100644 MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h > > >> > > >> diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h > > >> b/MdeModulePkg/Core/Dxe/DxeMain.h index 1a0babb..8a037ff > 100644 > > >> --- a/MdeModulePkg/Core/Dxe/DxeMain.h > > >> +++ b/MdeModulePkg/Core/Dxe/DxeMain.h > > >> @@ -3,6 +3,8 @@ > > >> internal structure and functions used by DxeCore module. > > >> > > >> Copyright (c) 2006 - 2017, Intel Corporation. All rights > > >> reserved.
> > >> +Copyright (c) 2017, AMD Incorporated. All rights reserved.
> > >> + > > >> This program and the accompanying materials are licensed and made > > >> available under the terms and conditions of the BSD License which > > >> accompanies this distribution. The full text of the license may be > > found > > >> at > > >> @@ -17,7 +19,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF > ANY > > >> KIND, EITHER EXPRESS OR IMPLIED. > > >> #define _DXE_MAIN_H_ > > >> > > >> > > >> - > > >> #include > > >> > > >> #include > > >> @@ -53,6 +54,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF > ANY > > >> KIND, EITHER EXPRESS OR IMPLIED. > > >> #include > > >> #include #include > > >> > > >> +#include > > >> + > > >> #include #include > > >> #include > > > >> @@ -296,12 +299,13 @@ extern EFI_RUNTIME_ARCH_PROTOCOL > > >> gRuntimeTemplate; > > >> > > >> extern EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE > > >> gLoadModuleAtFixAddressConfigurationTable; > > >> extern BOOLEAN > > >> gLoadFixedAddressCodeMemoryReady; > > >> + > > >> +extern EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL > *gGcdMemorySpaceNotify; > > >> + > > >> // > > >> // Service Initialization Functions // > > >> > > >> - > > >> - > > >> /** > > >> Called to initialize the pool. > > >> > > >> diff --git a/MdeModulePkg/Core/Dxe/DxeMain.inf > > >> b/MdeModulePkg/Core/Dxe/DxeMain.inf > > >> index 30d5984..888a16f 100644 > > >> --- a/MdeModulePkg/Core/Dxe/DxeMain.inf > > >> +++ b/MdeModulePkg/Core/Dxe/DxeMain.inf > > >> @@ -4,6 +4,8 @@ > > >> # It provides an implementation of DXE Core that is compliant with= DXE > CIS. > > >> # > > >> # Copyright (c) 2006 - 2017, Intel Corporation. All rights > > >> reserved.
> > >> +# Copyright (c) 2017, AMD Incorporated. All rights reserved.
> > >> +# > > >> # This program and the accompanying materials # are licensed > > >> and made available under the terms and conditions of the BSD > > >> License # which accompanies this distribution. The full text of > > >> the license may be found at @@ -162,6 +164,8 @@ > > >> gEfiSmmBase2ProtocolGuid ## SOMETIMES_CONSUM= ES > > >> gEfiBlockIoProtocolGuid ## SOMETIMES_CONSUM= ES > > >> > > >> + gEfiGcdMemorySpaceNotifyProtocolGuid ## CONSUMES > > >> + > > >> # Arch Protocols > > >> gEfiBdsArchProtocolGuid ## CONSUMES > > >> gEfiCpuArchProtocolGuid ## CONSUMES > > >> diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c > > >> b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c > > >> index 91e94a7..46b68da 100644 > > >> --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c > > >> +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c > > >> @@ -2,6 +2,8 @@ > > >> DXE Core Main Entry Point > > >> > > >> Copyright (c) 2006 - 2017, Intel Corporation. All rights > > >> reserved.
> > >> +Copyright (c) 2017, AMD Incorporated. All rights reserved.
> > >> + > > >> This program and the accompanying materials are licensed and made > > >> available under the terms and conditions of the BSD License which > > >> accompanies this distribution. The full text of the license may be > > found > > >> at > > >> @@ -42,6 +44,11 @@ EFI_GUID *gDxeCoreFileN= ame; > > >> EFI_LOADED_IMAGE_PROTOCOL *gDxeCoreLoadedImage; > > >> > > >> // > > >> +// DXE Core global for GCD notification protocol // > > >> +EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL > *gGcdMemorySpaceNotify =3D > > >> +NULL; > > >> + > > >> +// > > >> // DXE Core Module Variables > > >> // > > >> EFI_BOOT_SERVICES mBootServices =3D { diff --git > > >> a/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c > > >> b/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c > > >> index ea7c610..2314e34 100644 > > >> --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c > > >> +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c > > >> @@ -4,6 +4,8 @@ > > >> events that represent the Architectural Protocols. > > >> > > >> Copyright (c) 2006 - 2014, Intel Corporation. All rights > > >> reserved.
> > >> +Copyright (c) 2017, AMD Incorporated. All rights reserved.
> > >> + > > >> This program and the accompanying materials are licensed and made > > >> available under the terms and conditions of the BSD License which > > >> accompanies this distribution. The full text of the license may be > > found > > >> at > > >> @@ -45,9 +47,10 @@ EFI_CORE_PROTOCOL_NOTIFY_ENTRY > mArchProtocols[] > > >> =3D { // Optional protocols that the DXE Core will use if they are > > >> present // EFI_CORE_PROTOCOL_NOTIFY_ENTRY > mOptionalProtocols[] =3D > > >> { > > >> - { &gEfiSecurity2ArchProtocolGuid, (VOID **)&gSecurity2, = NULL, > > NULL, > > >> FALSE }, > > >> - { &gEfiSmmBase2ProtocolGuid, (VOID **)&gSmmBase2, > NULL, > > NULL, > > >> FALSE }, > > >> - { NULL, (VOID **)NULL, = NULL, > > NULL, > > >> FALSE } > > >> + { &gEfiSecurity2ArchProtocolGuid, (VOID **)&gSecurity2, > > >> NULL, NULL, FALSE }, > > >> + { &gEfiSmmBase2ProtocolGuid, (VOID **)&gSmmBase2, > > >> NULL, NULL, FALSE }, > > >> + { &gEfiGcdMemorySpaceNotifyProtocolGuid, (VOID > > >> + **)&gGcdMemorySpaceNotify, > > >> NULL, NULL, FALSE }, > > >> + { NULL, (VOID **)NULL, > > >> NULL, NULL, FALSE } > > >> }; > > >> > > >> // > > >> diff --git a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > >> b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c index a06f8bb..223fcd8 100644 > > >> --- a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > >> +++ b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > >> @@ -4,6 +4,8 @@ > > >> are accessible to the CPU that is executing the DXE core. > > >> > > >> Copyright (c) 2006 - 2017, Intel Corporation. All rights > > >> reserved.
> > >> +Copyright (c) 2017, AMD Incorporated. All rights reserved.
> > >> + > > >> This program and the accompanying materials are licensed and made > > >> available under the terms and conditions of the BSD License which > > >> accompanies this distribution. The full text of the license may be > > found > > >> at > > >> @@ -896,6 +898,9 @@ CoreConvertSpace ( > > >> } else { > > >> Entry->Capabilities =3D Capabilities | EFI_MEMORY_RUNTIME; > > >> } > > >> + if (gGcdMemorySpaceNotify) { > > >> + gGcdMemorySpaceNotify->MemorySpaceAddNotify > > >> + (GcdMemoryType, > > BaseAddress, > > >> Length, Entry->Capabilities); > > >> + } > > >> break; > > >> case GCD_ADD_IO_OPERATION: > > >> Entry->GcdIoType =3D GcdIoType; @@ -914,6 +919,9 @@ > > >> CoreConvertSpace ( > > >> case GCD_REMOVE_MEMORY_OPERATION: > > >> Entry->GcdMemoryType =3D EfiGcdMemoryTypeNonExistent; > > >> Entry->Capabilities =3D 0; > > >> + if (gGcdMemorySpaceNotify) { > > >> + gGcdMemorySpaceNotify->MemorySpaceRemoveNotify > (BaseAddress, Length); > > >> + } > > >> break; > > >> case GCD_REMOVE_IO_OPERATION: > > >> Entry->GcdIoType =3D EfiGcdIoTypeNonExistent; diff --git > > >> a/MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h > > >> b/MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h > > >> new file mode 100644 > > >> index 0000000..9174957 > > >> --- /dev/null > > >> +++ b/MdeModulePkg/Include/Protocol/GcdMemorySpaceNotify.h > > >> @@ -0,0 +1,65 @@ > > >> +/** @file > > >> + This file declares the GcdMemorySpaceNotify Protocol. > > >> + > > >> + This Protocol is consumed by GCD to issue notications during > > >> + ADD/REMOVE > > >> operations. > > >> + > > >> + Copyright (c) 2017, AMD Inc. All rights reserved.
> > >> + > > >> + This program and the accompanying materials are licensed and > > >> + made available under the terms and conditions of the BSD > > >> License > > >> + which accompanies this distribution. The full text of the > > >> + license may be > > >> found at > > >> + http://opensource.org/licenses/bsd-license.php > > >> + > > >> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS > IS" > > >> + BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, > EITHER > > >> + EXPRESS OR > > IMPLIED. > > >> + > > >> +**/ > > >> + > > >> +#ifndef __EFI_GCD_MEMORY_SPACE_NOTIFY_H__ #define > > >> +__EFI_GCD_MEMORY_SPACE_NOTIFY_H__ > > >> + > > >> +#define EFI_GCD_MEMORY_SPACE_NOTIFY_GUID \ > > >> + { \ > > >> + 0xc842db69, 0x610e, 0x401a, {0x90, 0xd0, 0x88, 0x41, 0xf1, > > >> +0xdc, 0x53, > > 0x79 > > >> } \ > > >> + } > > >> + > > >> +/** > > >> + Notify on: Add a segment of memory to GCD map. > > >> + > > >> + @param GcdMemoryType Memory type of the segment. > > >> + @param BaseAddress Base address of the segment. > > >> + @param Length Length of the segment. > > >> + @param Capabilities Alterable attributes of the segmen= t. > > >> + > > >> +**/ > > >> +typedef > > >> +VOID > > >> +(EFIAPI *GCD_ADD_MEMORY_NOTIFY) ( > > >> + IN EFI_GCD_MEMORY_TYPE GcdMemoryType, > > >> + IN EFI_PHYSICAL_ADDRESS BaseAddress, > > >> + IN UINT64 Length, > > >> + IN UINT64 Capabilities > > >> +); > > >> + > > >> +/** > > >> + Notify on: Remove a segment of memory to GCD map. > > >> + > > >> + @param BaseAddress Base address of the segment. > > >> + @param Length Length of the segment. > > >> + > > >> +**/ > > >> +typedef > > >> +VOID > > >> +(EFIAPI *GCD_REMOVE_MEMORY_NOTIFY) ( > > >> + IN EFI_PHYSICAL_ADDRESS BaseAddress, > > >> + IN UINT64 Length > > >> +); > > >> + > > >> +typedef struct { > > >> + GCD_ADD_MEMORY_NOTIFY MemorySpaceAddNotify; > > >> + GCD_REMOVE_MEMORY_NOTIFY MemorySpaceRemoveNotify; } > > >> +EFI_GCD_MEMORY_SPACE_NOTIFY_PROTOCOL; > > >> + > > >> +extern EFI_GUID gEfiGcdMemorySpaceNotifyProtocolGuid; > > >> + > > >> +#endif > > >> diff --git a/MdeModulePkg/MdeModulePkg.dec > > >> b/MdeModulePkg/MdeModulePkg.dec index ca09cbc..95f9311 100644 > > >> --- a/MdeModulePkg/MdeModulePkg.dec > > >> +++ b/MdeModulePkg/MdeModulePkg.dec > > >> @@ -546,6 +546,9 @@ > > >> ## Include/Protocol/NonDiscoverableDevice.h > > >> gEdkiiNonDiscoverableDeviceProtocolGuid =3D { 0x0d51905b, 0xb77e, > > >> 0x452a, > > {0xa2, > > >> 0xc0, 0xec, 0xa0, 0xcc, 0x8d, 0x51, 0x4a } } > > >> > > >> + ## Include/Protocol/GcdMemorySpaceNotify.h > > >> + gEfiGcdMemorySpaceNotifyProtocolGuid =3D { 0xc842db69, 0x610e, > > >> + 0x401a, > > {0x90, > > >> 0xd0, 0x88, 0x41, 0xf1, 0xdc, 0x53, 0x79 } } > > >> + > > >> # > > >> # [Error.gEfiMdeModulePkgTokenSpaceGuid] > > >> # 0x80000001 | Invalid value provided. > > >> -- > > >> 2.7.4 > > >> > > >> _______________________________________________ > > >> edk2-devel mailing list > > >> edk2-devel@lists.01.org> > > >> https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel