From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web11.12314.1647966093441928217 for ; Tue, 22 Mar 2022 09:21:33 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=UPVu9oeq; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [47.202.59.224]) by linux.microsoft.com (Postfix) with ESMTPSA id 23EB120B4783; Tue, 22 Mar 2022 09:21:32 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 23EB120B4783 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1647966093; bh=f/pLGftQQVch5fJ61GRriJB1j/FNpHH4HheZbTydpQ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UPVu9oeqjP17dS3MtYezbNcF0uinRZ1BMjFSgvAcfuKCQ81t6qei4shs7qQSPAaGx rirSnN6vecRoi4qyOqlmhjUg83v7LN2z9KWq3mUa8D+QnY4Wr7WG8SdshNX8Y4S/Yl njCr+sL//OVOqj81jaRhRIMpgHgRQz/qIgyUdfCI= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Andrew Fish , Kang Gao , Michael D Kinney , Michael Kubacki , Leif Lindholm , Benjamin You , Liu Yun , Ankit Sinha , Nate DeSimone Subject: [PATCH v1 16/41] PrmPkg: Remove PRM Module Update Lock Date: Tue, 22 Mar 2022 12:19:22 -0400 Message-Id: <20220322161947.9319-17-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220322161947.9319-1-mikuback@linux.microsoft.com> References: <20220322161947.9319-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable From: Michael Kubacki Per latest design direction, we've abandoned treating the PRM Module Update Lock as an exported object. There was concern sharing the PRM module address space (where the lock structure resided in a data section) with the OS kernel mode driver. The lock will now be entirely maintained in OS context with interaces to control the lock available to ASL (for _DSM invocation) and OS native code (for direct call). Cc: Andrew Fish Cc: Kang Gao Cc: Michael D Kinney Cc: Michael Kubacki Cc: Leif Lindholm Cc: Benjamin You Cc: Liu Yun Cc: Ankit Sinha Cc: Nate DeSimone Signed-off-by: Michael Kubacki --- PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c | 18 -------- PrmPkg/Include/PrmModule.h | 20 --------- PrmPkg/Include/PrmModuleUpdate.h | 46 -------------------- PrmPkg/PrmLoaderDxe/PrmAcpiTable.h | 2 - PrmPkg/Readme.md | 37 ++++++++-------- 5 files changed, 18 insertions(+), 105 deletions(-) diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c b/PrmPkg/PrmLoaderDxe/Prm= LoaderDxe.c index e45f8685e81f..e2a838ea29bd 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c @@ -26,7 +26,6 @@ =20 #include #include -#include =20 LIST_ENTRY mPrmModuleList; =20 @@ -707,23 +706,6 @@ ProcessPrmModules ( ); ASSERT_EFI_ERROR (Status); =20 - Status =3D GetExportEntryAddress ( - PRM_STRING (PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_NAME), - CurrentImageAddress, - CurrentImageExportDirectory, - (EFI_PHYSICAL_ADDRESS *) &(CurrentModuleInfoStruct->Modu= leUpdateLock) - ); - ASSERT_EFI_ERROR (Status); - if (!EFI_ERROR (Status)) { - DEBUG (( - DEBUG_INFO, - " %a %a: Found PRM module update lock physical address at 0x%= 016x.\n", - _DBGMSGID_, - __FUNCTION__, - CurrentModuleInfoStruct->ModuleUpdateLock - )); - } - // It is currently valid for a PRM module not to use a context buffe= r Status =3D GetModuleContextBuffers ( ByModuleGuid, diff --git a/PrmPkg/Include/PrmModule.h b/PrmPkg/Include/PrmModule.h index f40fb42a2b4f..d7047d8eec58 100644 --- a/PrmPkg/Include/PrmModule.h +++ b/PrmPkg/Include/PrmModule.h @@ -15,7 +15,6 @@ #include #include #include -#include #include =20 /** @@ -46,23 +45,4 @@ IN PRM_CONTEXT_BUFFER *ContextBuffer \ ) \ =20 -/** - A macro that declares the PRM Module Update Lock Descriptor for a PRM = Module. - - This macro is intended to be used once in a PRM Module so the module u= pdate lock descriptor is - exported for the module. - -**/ -#define PRM_MODULE_UPDATE_LOCK_EXPORT = \ - PRM_EXPORT_API PRM_MODULE_UPDATE_LOCK_DESCRIPTOR PRM_MODULE_UPDATE_LOC= K_DESCRIPTOR_NAME =3D { \ - PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_SIGNATURE, = \ - PRM_MODULE_UPDATE_LOCK_REVISION, = \ - { 0 } = \ - } = \ - -// -// A PRM module is required to export the PRM Module Update Lock -// -PRM_MODULE_UPDATE_LOCK_EXPORT; - #endif diff --git a/PrmPkg/Include/PrmModuleUpdate.h b/PrmPkg/Include/PrmModuleU= pdate.h deleted file mode 100644 index fde97eff0462..000000000000 --- a/PrmPkg/Include/PrmModuleUpdate.h +++ /dev/null @@ -1,46 +0,0 @@ -/** @file - - Definition for the Platform Runtime Mechanism (PRM) module update stru= ctures. - - Copyright (c) Microsoft Corporation - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef PRM_MODULE_UPDATE_H_ -#define PRM_MODULE_UPDATE_H_ - -#include - -#define PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_NAME PrmModuleUpdateLoc= k -#define PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_SIGNATURE SIGNATURE_64 ('P',= 'R', 'M', '_', 'M', 'U', 'L', '_') -#define PRM_MODULE_UPDATE_LOCK_REVISION 0x0 - -#pragma pack(push, 1) - -/// -/// Maintains the PRM Module Update Lock state -/// -typedef union { - /// - /// Individual bit fields - /// - struct { - UINT8 Acquired : 1; ///< [0] - If 1 lock is acquired. If 0= lock is released. - UINT8 Reserved : 7; ///< [7:1] - Reserved - } Bits; - /// - /// All bit fields as an 8-bit value - /// - UINT8 Uint8; -} PRM_MODULE_UPDATE_LOCK; - -typedef struct { - UINT64 Signature; - UINT16 Revision; - PRM_MODULE_UPDATE_LOCK Lock; -} PRM_MODULE_UPDATE_LOCK_DESCRIPTOR; - -#pragma pack(pop) - -#endif diff --git a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h b/PrmPkg/PrmLoaderDxe/Prm= AcpiTable.h index 8a9c82347d93..ca09be389235 100644 --- a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h +++ b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h @@ -55,8 +55,6 @@ typedef struct { UINT16 HandlerCount; ///< N= umber of entries in the Handler Info array UINT32 HandlerInfoOffset; ///< O= ffset in bytes from the beginning of this ///< s= tructure to the Handler Info array - UINT64 ModuleUpdateLock; ///< P= hysical address of the PRM Module Update Lock - ///< d= escriptor (PRM_MODULE_UPDATE_LOCK_DESCRIPTOR *) UINT64 RuntimeMmioRanges; ///< P= hysical address of the PRM MMIO Ranges ///< s= tructure (PRM_MODULE_RUNTIME_MMIO_RANGES *) PRM_HANDLER_INFORMATION_STRUCT HandlerInfoStructure[1]; diff --git a/PrmPkg/Readme.md b/PrmPkg/Readme.md index 00ef41bc5f42..f430006905c5 100644 --- a/PrmPkg/Readme.md +++ b/PrmPkg/Readme.md @@ -153,34 +153,33 @@ motivation behind using PE/COFF export tables to ex= pose PRM module information a definition consistent between firmware and OS load. =20 ### PRM Module Exports -A PRM module must contain at least three exports: A PRM Module Export De= scriptor, a PRM Module Update Lock Descriptor, -and at least one PRM handler. Here's an example of an export table from = a PRM module that has a single PRM handler: +A PRM module must contain at least two exports: A PRM Module Export Desc= riptor and at least one PRM handler. Here's +an example of an export table from a PRM module that has a single PRM ha= ndler: =20 ``` - 0000000000005000: 00 00 00 00 FF FF FF FF 00 00 00 00 46 50 00 00 ...= .=C3=BF=C3=BF=C3=BF=C3=BF....FP.. - 0000000000005010: 01 00 00 00 03 00 00 00 03 00 00 00 28 50 00 00 ...= .........(P.. - 0000000000005020: 34 50 00 00 40 50 00 00 78 13 00 00 30 40 00 00 4P.= .@P..x...0@.. - 0000000000005030: 20 40 00 00 67 50 00 00 86 50 00 00 A0 50 00 00 @.= .gP...P...P.. - 0000000000005040: 00 00 01 00 02 00 50 72 6D 53 61 6D 70 6C 65 43 ...= ...PrmSampleC - 0000000000005050: 6F 6E 74 65 78 74 42 75 66 66 65 72 4D 6F 64 75 ont= extBufferModu - 0000000000005060: 6C 65 2E 64 6C 6C 00 44 75 6D 70 53 74 61 74 69 le.= dll.DumpStati - 0000000000005070: 63 44 61 74 61 42 75 66 66 65 72 50 72 6D 48 61 cDa= taBufferPrmHa - 0000000000005080: 6E 64 6C 65 72 00 50 72 6D 4D 6F 64 75 6C 65 45 ndl= er.PrmModuleE - 0000000000005090: 78 70 6F 72 74 44 65 73 63 72 69 70 74 6F 72 00 xpo= rtDescriptor. - 00000000000050A0: 50 72 6D 4D 6F 64 75 6C 65 55 70 64 61 74 65 4C Prm= ModuleUpdateL - 00000000000050B0: 6F 63 6B 00 ock= . + 0000000000005000: 00 00 00 00 FF FF FF FF 00 00 00 00 3C 50 00 00 ...= .........