public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael Kubacki" <mikuback@linux.microsoft.com>
To: devel@edk2.groups.io
Cc: Andrew Fish <afish@apple.com>, Kang Gao <kang.gao@intel.com>,
	Michael D Kinney <michael.d.kinney@intel.com>,
	Michael Kubacki <michael.kubacki@microsoft.com>,
	Leif Lindholm <leif@nuviainc.com>,
	Benjamin You <benjamin.you@intel.com>,
	Liu Yun <yun.y.liu@intel.com>,
	Ankit Sinha <ankit.sinha@intel.com>,
	Nate DeSimone <nathaniel.l.desimone@intel.com>
Subject: [PATCH v1 16/41] PrmPkg: Remove PRM Module Update Lock
Date: Tue, 22 Mar 2022 12:19:22 -0400	[thread overview]
Message-ID: <20220322161947.9319-17-mikuback@linux.microsoft.com> (raw)
In-Reply-To: <20220322161947.9319-1-mikuback@linux.microsoft.com>

From: Michael Kubacki <michael.kubacki@microsoft.com>

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 <afish@apple.com>
Cc: Kang Gao <kang.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Benjamin You <benjamin.you@intel.com>
Cc: Liu Yun <yun.y.liu@intel.com>
Cc: Ankit Sinha <ankit.sinha@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
---
 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/PrmLoaderDxe.c
index e45f8685e81f..e2a838ea29bd 100644
--- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c
+++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c
@@ -26,7 +26,6 @@
 
 #include <PrmContextBuffer.h>
 #include <PrmMmio.h>
-#include <PrmModuleUpdate.h>
 
 LIST_ENTRY          mPrmModuleList;
 
@@ -707,23 +706,6 @@ ProcessPrmModules (
                 );
     ASSERT_EFI_ERROR (Status);
 
-    Status =  GetExportEntryAddress (
-                PRM_STRING (PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_NAME),
-                CurrentImageAddress,
-                CurrentImageExportDirectory,
-                (EFI_PHYSICAL_ADDRESS *) &(CurrentModuleInfoStruct->ModuleUpdateLock)
-                );
-    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 buffer
     Status = 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 <PrmDataBuffer.h>
 #include <PrmExportDescriptor.h>
 #include <PrmMmio.h>
-#include <PrmModuleUpdate.h>
 #include <PrmOsServices.h>
 
 /**
@@ -46,23 +45,4 @@
     IN PRM_CONTEXT_BUFFER   *ContextBuffer      \
     )                                           \
 
-/**
-  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 update lock descriptor is
-  exported for the module.
-
-**/
-#define PRM_MODULE_UPDATE_LOCK_EXPORT                                                           \
-  PRM_EXPORT_API PRM_MODULE_UPDATE_LOCK_DESCRIPTOR PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_NAME = {   \
-    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/PrmModuleUpdate.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 structures.
-
-  Copyright (c) Microsoft Corporation
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef PRM_MODULE_UPDATE_H_
-#define PRM_MODULE_UPDATE_H_
-
-#include <Uefi.h>
-
-#define PRM_MODULE_UPDATE_LOCK_DESCRIPTOR_NAME        PrmModuleUpdateLock
-#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/PrmAcpiTable.h
index 8a9c82347d93..ca09be389235 100644
--- a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h
+++ b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h
@@ -55,8 +55,6 @@ typedef struct {
   UINT16                              HandlerCount;               ///< Number of entries in the Handler Info array
   UINT32                              HandlerInfoOffset;          ///< Offset in bytes from the beginning of this
                                                                   ///< structure to the Handler Info array
-  UINT64                              ModuleUpdateLock;           ///< Physical address of the PRM Module Update Lock
-                                                                  ///< descriptor (PRM_MODULE_UPDATE_LOCK_DESCRIPTOR *)
   UINT64                              RuntimeMmioRanges;          ///< Physical address of the PRM MMIO Ranges
                                                                   ///< structure (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 expose PRM module information a
 definition consistent between firmware and OS load.
 
 ### PRM Module Exports
-A PRM module must contain at least three exports: A PRM Module Export Descriptor, 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 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:
 
 ```
-  0000000000005000: 00 00 00 00 FF FF FF FF 00 00 00 00 46 50 00 00  ....ÿÿÿÿ....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  ontextBufferModu
-  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  cDataBufferPrmHa
-  0000000000005080: 6E 64 6C 65 72 00 50 72 6D 4D 6F 64 75 6C 65 45  ndler.PrmModuleE
-  0000000000005090: 78 70 6F 72 74 44 65 73 63 72 69 70 74 6F 72 00  xportDescriptor.
-  00000000000050A0: 50 72 6D 4D 6F 64 75 6C 65 55 70 64 61 74 65 4C  PrmModuleUpdateL
-  00000000000050B0: 6F 63 6B 00                                      ock.
+  0000000000005000: 00 00 00 00 FF FF FF FF 00 00 00 00 3C 50 00 00  ............<P..
+  0000000000005010: 01 00 00 00 02 00 00 00 02 00 00 00 28 50 00 00  ............(P..
+  0000000000005020: 30 50 00 00 38 50 00 00 78 13 00 00 20 40 00 00  0P..8P..x... @..
+  0000000000005030: 5D 50 00 00 7C 50 00 00 00 00 01 00 50 72 6D 53  ]P..|P......PrmS
+  0000000000005040: 61 6D 70 6C 65 43 6F 6E 74 65 78 74 42 75 66 66  ampleContextBuff
+  0000000000005050: 65 72 4D 6F 64 75 6C 65 2E 64 6C 6C 00 44 75 6D  erModule.dll.Dum
+  0000000000005060: 70 53 74 61 74 69 63 44 61 74 61 42 75 66 66 65  pStaticDataBuffe
+  0000000000005070: 72 50 72 6D 48 61 6E 64 6C 65 72 00 50 72 6D 4D  rPrmHandler.PrmM
+  0000000000005080: 6F 64 75 6C 65 45 78 70 6F 72 74 44 65 73 63 72  oduleExportDescr
+  0000000000005090: 69 70 74 6F 72 00                                iptor.
 
     00000000 characteristics
     FFFFFFFF time date stamp
-        0.10 version
+        0.00 version
            1 ordinal base
-           3 number of functions
-           3 number of names
+           2 number of functions
+           2 number of names
 
     ordinal hint RVA      name
+
           1    0 00001378 DumpStaticDataBufferPrmHandler
-          2    1 00004030 PrmModuleExportDescriptor
-          3    2 00004020 PrmModuleUpdateLock
+          2    1 00004020 PrmModuleExportDescriptor
+
 ```
 ### PRM Image Format
 PRM modules are ultimately PE/COFF images. However, when packaged in firmware the PE/COFF image is placed into a
-- 
2.28.0.windows.1


  parent reply	other threads:[~2022-03-22 16:21 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-22 16:19 [PATCH v1 00/41] Add PrmPkg Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 01/41] PrmPkg: Add package and include headers Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 02/41] PrmPkg: Add PrmConfig protocol interface Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 03/41] PrmPkg/PrmContextBufferLib: Add initial library instance Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 04/41] PrmPkg/PrmConfigDxe: Add initial driver Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 05/41] PrmPkg: Add initial PrmSamplePrintModule Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 06/41] PrmPkg: Add initial PrmSampleMemoryAllocationModule Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 07/41] PrmPkg: Add initial PrmSampleHardwareAccessModule Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 08/41] PrmPkg: Add initial PrmSampleContextBufferModule Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 09/41] PrmPkg: Add initial package DSC file Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 10/41] Readme.md: Add initial content Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 11/41] PrmPkg: Add ALLOCATE_CONTEXT_BUFFER_IN_FW build option Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 12/41] PrmPkg: Enable variable growth for the PRM_MODULE_EXPORT macro Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 13/41] PrmPkg: Publish PRM operation region to support PRM ACPI _DSM invocation Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 14/41] PrmPkg: Export major/minor version in PRM module PE COFF header Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 15/41] PrmPkg: Add initial PrmSsdtInstallDxe module Michael Kubacki
2022-03-22 16:19 ` Michael Kubacki [this message]
2022-03-22 16:19 ` [PATCH v1 17/41] PrmPkg: Remove ALLOCATE_CONTEXT_BUFFER_IN_FW build flag Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 18/41] PrmPkg/PrmContextBuffer.h: Add ACPI parameter support structures Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 19/41] PrmPkg/PrmLoaderDxe: Add ACPI parameter buffer support Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 20/41] PrmPkg/PrmSampleContextBufferModule: Remove OS debug print requirement Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 21/41] PrmPkg/PrmSampleHardwareAccessModule: Add non-print PRM handlers Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 22/41] PrmPkg/SampleAcpiParameterBufferModule: Add initial module Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 23/41] PrmPkg/HardwareAccessModuleConfigLib: Add initial library Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 24/41] PrmPkg/Samples/Readme.md: Add initial file Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 25/41] PrmPkg: Refactor some PrmLoaderDxe functionality into libraries Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 26/41] PrmPkg/Application/PrmInfo: Add initial application Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 27/41] PrmPkg: Enforce stricter types Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 28/41] PrmPkg/Test/PrmPkgHostTest.dsc: Add initial file Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 29/41] PrmPkg/Test/UnitTest/Library: Add initial UEFI Boot Services test lib Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 30/41] PrmPkg/Library/DxePrmContextBufferLib: Add host-based unit tests Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 31/41] PrmPkg/DxePrmModuleDiscoveryLib: Add initial " Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 32/41] PrmPkg: Add PlatformGuid Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 33/41] PrmPkg: Update PRM OpRegion Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 34/41] Readme.md: Add iASL note and QEMU sample link Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 35/41] PrmPkg: Replace PcdPrmPlatformGuid with EDKII_DSC_PLATFORM_GUID Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 36/41] PrmPkg/Samples: Remove PrmSampleMemoryAllocationModule Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 37/41] PrmPkg/Samples: Remove PrmSamplePrintModule Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 38/41] PrmPkg: Remove the concept of OS services Michael Kubacki
2022-03-22 16:19 ` [PATCH v1 39/41] Readme.md: Add a link to PRM Specification Michael Kubacki
2022-03-28  8:48 ` 回复: [edk2-devel] [PATCH v1 00/41] Add PrmPkg gaoliming
2022-03-28 14:05   ` Michael Kubacki
2022-03-29 16:28 ` Sinha, Ankit
2022-03-31  0:52   ` 回复: " gaoliming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220322161947.9319-17-mikuback@linux.microsoft.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox