]> git.proxmox.com Git - mirror_edk2.git/commitdiff
PrmPkg: Add initial PrmSsdtInstallDxe module
authorMichael Kubacki <michael.kubacki@microsoft.com>
Wed, 20 May 2020 17:56:03 +0000 (10:56 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 5 Apr 2022 00:42:38 +0000 (00:42 +0000)
Adds a new module that installs a PRM SSDT.

Note: A library class would allow a high degree of flexibility for
platforms that choose:
  1. To not install a PRM SSDT at all (using a NULL library instance)
  2. To install a specific PRM SSDT implementation

However, it is implemented as a driver since build tools are not
linking ACPI tables to drivers from linked library classes.

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>
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
Acked-by: Leif Lindholm <quic_llindhol@quicinc.com>
Reviewed-by: Ankit Sinha <ankit.sinha@intel.com>
PrmPkg/PrmLoaderDxe/Prm.asl [deleted file]
PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c
PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf
PrmPkg/PrmPkg.dsc
PrmPkg/PrmSsdtInstallDxe/Prm.asl [new file with mode: 0644]
PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.c [new file with mode: 0644]
PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.inf [new file with mode: 0644]

diff --git a/PrmPkg/PrmLoaderDxe/Prm.asl b/PrmPkg/PrmLoaderDxe/Prm.asl
deleted file mode 100644 (file)
index 76b56de..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/** @file\r
-  The definition block in ACPI table for PRM Operation Region\r
-\r
-  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
-  SPDX-License-Identifier: BSD-2-Clause-Patent\r
-**/\r
-\r
-DefinitionBlock (\r
-    "Prm.aml",\r
-    "SSDT",\r
-    0x01,\r
-    "OEMID",\r
-    "PRMOPREG",\r
-    0x3000\r
-    )\r
-{\r
-    Scope (\_SB)\r
-    {\r
-        //\r
-        // PRM Bridge Device\r
-        //\r
-\r
-        Device (PRMB)\r
-        {\r
-            Name (_HID, "80860222")\r
-            Name (_CID, "80860222")\r
-            Name (_DDN, "PRM Bridge Device")\r
-            Name (_STA, 0xF)\r
-            OperationRegion (OPR1, 0x80, 0, 16)\r
-            Field (OPR1, DWordAcc, NoLock, Preserve) //Make it ByteAcc for parameter validation\r
-            {\r
-                Var0, 128\r
-            }\r
-            Method (SETV, 1, Serialized)\r
-            {\r
-                CopyObject (Arg0, \_SB.PRMB.Var0)\r
-            }\r
-        }\r
-\r
-        //\r
-        // PRM Test Device\r
-        //\r
-\r
-        Device (PRMT)\r
-        {\r
-            Name (_HID, "80860223")\r
-            Name (_CID, "80860223")\r
-            Name (_DDN, "PRM Test Device")\r
-            Name (_STA, 0xF)\r
-            Name (BUF1, Buffer(16)\r
-            {\r
-                0x5F, 0xAD, 0xF2, 0xD5, 0x47, 0xA3, 0x3E, 0x4D, //Guid_0\r
-                0x87, 0xBC, 0xC2, 0xCE, 0x63, 0x02, 0x9C, 0xC8, //Guid_1\r
-            })\r
-            Name (BUF2, Buffer(16)\r
-            {\r
-                0xC3, 0xAD, 0xE7, 0xA9, 0xD0, 0x8C, 0x9A, 0x42, //Guid_0\r
-                0x89, 0x15, 0x10, 0x94, 0x6E, 0xBD, 0xE3, 0x18, //Guid_1\r
-            })\r
-            Name (BUF3, Buffer(16)\r
-            {\r
-                0x14, 0xC2, 0x88, 0xB6, 0x81, 0x40, 0xEB, 0x4E, //Guid_0\r
-                0x8D, 0x26, 0x1E, 0xB5, 0xA3, 0xBC, 0xF1, 0x1A, //Guid_1\r
-            })\r
-            Method (NTST)\r
-            {\r
-                \_SB.PRMB.SETV (BUF1)\r
-            }\r
-            Method (TST1)\r
-            {\r
-                \_SB.PRMB.SETV (BUF1)\r
-            }\r
-            Method (TST2)\r
-            {\r
-                \_SB.PRMB.SETV (BUF2)\r
-            }\r
-            Method (TST3)\r
-            {\r
-                \_SB.PRMB.SETV (BUF3)\r
-            }\r
-        }\r
-    }\r
-\r
-} // End of Definition Block\r
-\r
-\r
-\r
index 5e14b8e09dd01733122c0e8998844ee4170bdfdf..e45f8685e81f83bdce30051b0c16ccf39a26ae1c 100644 (file)
@@ -20,7 +20,6 @@
 #include <Library/PrmContextBufferLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiLib.h>\r
-#include <Library/DxeServicesLib.h>\r
 #include <Protocol/AcpiTable.h>\r
 #include <Protocol/LoadedImage.h>\r
 #include <Protocol/PrmConfig.h>\r
@@ -811,8 +810,6 @@ PublishPrmAcpiTable (
   EFI_STATUS                              Status;\r
   EFI_ACPI_TABLE_PROTOCOL                 *AcpiTableProtocol;\r
   UINTN                                   TableKey;\r
-  EFI_ACPI_DESCRIPTION_HEADER             *Ssdt;\r
-  UINTN                                   SsdtSize;\r
 \r
   if (PrmAcpiDescriptionTable == NULL || PrmAcpiDescriptionTable->Header.Signature != PRM_TABLE_SIGNATURE) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -836,36 +833,6 @@ PublishPrmAcpiTable (
   }\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  //\r
-  // Load SSDT\r
-  //\r
-  Status = GetSectionFromFv (\r
-               &gEfiCallerIdGuid,\r
-               EFI_SECTION_RAW,\r
-               0,\r
-               (VOID **) &Ssdt,\r
-               &SsdtSize\r
-               );\r
-  ASSERT_EFI_ERROR (Status);\r
-  DEBUG ((DEBUG_INFO, "%a %a: SSDT loaded ...\n", _DBGMSGID_, __FUNCTION__));\r
-\r
-  //\r
-  // Update OEM ID\r
-  //\r
-  CopyMem (&Ssdt->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (Ssdt->OemId));\r
-\r
-  //\r
-  // Publish the SSDT. Table is re-checksumed.\r
-  //\r
-  TableKey = 0;\r
-  Status = AcpiTableProtocol->InstallAcpiTable (\r
-                        AcpiTableProtocol,\r
-                        Ssdt,\r
-                        SsdtSize,\r
-                        &TableKey\r
-                        );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
   return Status;\r
 }\r
 \r
index 016ced4b37322f7c76c4d819baa630ca536f10f6..4d959ccd35a3017b9f975801a4a27346da8f1df3 100644 (file)
@@ -24,7 +24,6 @@
   PrmAcpiTable.h\r
   PrmLoader.h\r
   PrmLoaderDxe.c\r
-  Prm.asl\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
   BaseMemoryLib\r
   DebugLib\r
   MemoryAllocationLib\r
+  PcdLib\r
   PeCoffLib\r
   PrmContextBufferLib\r
   UefiBootServicesTableLib\r
   UefiDriverEntryPoint\r
   UefiLib\r
-  DxeServicesLib\r
-  PcdLib\r
 \r
 [Pcd]\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId            ## CONSUMES\r
index 1a0ddc6ac1815214127bb458b9fe2d6517b80fce..d3aeffa152e0ccb4ec8edc68f6350a1f8b9ec157 100644 (file)
   #\r
   $(PLATFORM_PACKAGE)/PrmLoaderDxe/PrmLoaderDxe.inf\r
 \r
+  #\r
+  # PRM SSDT Installation Driver\r
+  #\r
+  $(PLATFORM_PACKAGE)/PrmSsdtInstallDxe/PrmSsdtInstallDxe.inf\r
+\r
   #\r
   # PRM Sample Modules\r
   #\r
diff --git a/PrmPkg/PrmSsdtInstallDxe/Prm.asl b/PrmPkg/PrmSsdtInstallDxe/Prm.asl
new file mode 100644 (file)
index 0000000..0457d09
--- /dev/null
@@ -0,0 +1,75 @@
+/** @file\r
+  The definition block in ACPI table for PRM Operation Region\r
+\r
+  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+**/\r
+\r
+DefinitionBlock (\r
+    "Prm.aml",\r
+    "SSDT",\r
+    2,\r
+    "OEMID ",\r
+    "PRMOPREG",\r
+    0x1000\r
+    )\r
+{\r
+    Scope (\_SB)\r
+    {\r
+        //\r
+        // PRM Bridge Device\r
+        //\r
+\r
+        Device (PRMB)\r
+        {\r
+            Name (_HID, "80860222")\r
+            Name (_CID, "80860222")\r
+            Name (_DDN, "PRM Bridge Device")\r
+            Name (_STA, 0xF)\r
+            OperationRegion (OPR1, 0x80, 0, 16)\r
+            Field (OPR1, DWordAcc, NoLock, Preserve) //Make it ByteAcc for parameter validation\r
+            {\r
+                Var0, 128\r
+            }\r
+            Method (SETV, 1, Serialized)\r
+            {\r
+                CopyObject (Arg0, \_SB.PRMB.Var0)\r
+            }\r
+        }\r
+\r
+        //\r
+        // PRM Test Device\r
+        //\r
+\r
+        Device (PRMT)\r
+        {\r
+            Name (_HID, "80860223")\r
+            Name (_CID, "80860223")\r
+            Name (_DDN, "PRM Test Device")\r
+            Name (_STA, 0xF)\r
+            Name (BUF1, Buffer(16)\r
+            {\r
+                0x5F, 0xAD, 0xF2, 0xD5, 0x47, 0xA3, 0x3E, 0x4D, //Guid_0\r
+                0x87, 0xBC, 0xC2, 0xCE, 0x63, 0x02, 0x9C, 0xC8, //Guid_1\r
+            })\r
+            Name (BUF2, Buffer(16)\r
+            {\r
+                0xC3, 0xAD, 0xE7, 0xA9, 0xD0, 0x8C, 0x9A, 0x42, //Guid_0\r
+                0x89, 0x15, 0x10, 0x94, 0x6E, 0xBD, 0xE3, 0x18, //Guid_1\r
+            })\r
+            Name (BUF3, Buffer(16)\r
+            {\r
+                0x14, 0xC2, 0x88, 0xB6, 0x81, 0x40, 0xEB, 0x4E, //Guid_0\r
+                0x8D, 0x26, 0x1E, 0xB5, 0xA3, 0xBC, 0xF1, 0x1A, //Guid_1\r
+            })\r
+            Method (NTST)\r
+            {\r
+                \_SB.PRMB.SETV (BUF1)\r
+            }\r
+        }\r
+    }\r
+\r
+} // End of Definition Block\r
+\r
+\r
+\r
diff --git a/PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.c b/PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.c
new file mode 100644 (file)
index 0000000..bd9ce2c
--- /dev/null
@@ -0,0 +1,110 @@
+/** @file\r
+\r
+  This file contains a sample implementation of the Platform Runtime Mechanism (PRM)\r
+  SSDT Install library.\r
+\r
+  Copyright (c) Microsoft Corporation\r
+  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <IndustryStandard/Acpi.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/DxeServicesLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Protocol/AcpiTable.h>\r
+\r
+#define _DBGMSGID_  "[PRMSSDTINSTALL]"\r
+\r
+/**\r
+  Installs the PRM SSDT.\r
+\r
+  @param[in]  OemId                       OEM ID to be used in the SSDT installation.\r
+\r
+  @retval EFI_SUCCESS                     The PRM SSDT was installed successfully.\r
+  @retval EFI_INVALID_PARAMETER           The OemId pointer argument is NULL.\r
+  @retval EFI_NOT_FOUND                   An instance of gEfiAcpiTableProtocolGuid was not found installed or\r
+                                          the SSDT (AML RAW section) could not be found in the current FV.\r
+  @retval EFI_OUT_OF_RESOURCES            Insufficient memory resources to install the PRM SSDT.\r
+\r
+**/\r
+EFI_STATUS\r
+InstallPrmSsdt (\r
+  IN  CONST UINT8                         *OemId\r
+  )\r
+{\r
+  EFI_STATUS                              Status;\r
+  UINTN                                   SsdtSize;\r
+  UINTN                                   TableKey;\r
+  EFI_ACPI_TABLE_PROTOCOL                 *AcpiTableProtocol;\r
+  EFI_ACPI_DESCRIPTION_HEADER             *Ssdt;\r
+\r
+  DEBUG ((DEBUG_INFO, "%a %a - Entry.\n", _DBGMSGID_, __FUNCTION__));\r
+\r
+  if (OemId == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTableProtocol);\r
+  if (!EFI_ERROR (Status)) {\r
+    //\r
+    // Discover the SSDT\r
+    //\r
+    Status =  GetSectionFromFv (\r
+                &gEfiCallerIdGuid,\r
+                EFI_SECTION_RAW,\r
+                0,\r
+                (VOID **) &Ssdt,\r
+                &SsdtSize\r
+                );\r
+    ASSERT_EFI_ERROR (Status);\r
+    DEBUG ((DEBUG_INFO, "%a %a: SSDT loaded...\n", _DBGMSGID_, __FUNCTION__));\r
+\r
+    //\r
+    // Update OEM ID in the SSDT\r
+    //\r
+    CopyMem (&Ssdt->OemId, OemId, sizeof (Ssdt->OemId));\r
+\r
+    //\r
+    // Publish the SSDT. Table is re-checksummed.\r
+    //\r
+    TableKey = 0;\r
+    Status = AcpiTableProtocol->InstallAcpiTable (\r
+                                  AcpiTableProtocol,\r
+                                  Ssdt,\r
+                                  SsdtSize,\r
+                                  &TableKey\r
+                                  );\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
+\r
+  return Status;\r
+}\r
+\r
+/**\r
+  The entry point for this module.\r
+\r
+  @param[in]  ImageHandle    The firmware allocated handle for the EFI image.\r
+  @param[in]  SystemTable    A pointer to the EFI System Table.\r
+\r
+  @retval EFI_SUCCESS    The entry point is executed successfully.\r
+  @retval Others         An error occurred when executing this entry point.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PrmSsdtInstallEntryPoint (\r
+  IN EFI_HANDLE                           ImageHandle,\r
+  IN EFI_SYSTEM_TABLE                     *SystemTable\r
+  )\r
+{\r
+  EFI_STATUS    Status;\r
+\r
+  Status = InstallPrmSsdt ((UINT8 *) PcdGetPtr (PcdAcpiDefaultOemId));\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return Status;\r
+}\r
diff --git a/PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.inf b/PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.inf
new file mode 100644 (file)
index 0000000..e68e946
--- /dev/null
@@ -0,0 +1,52 @@
+## @file\r
+#  PRM SSDT Installation Driver\r
+#\r
+#  This driver installs the PRM SSDT.\r
+#  * Not all PRM implementations may need this support and if it is not needed, the driver\r
+#    can simply be removed from the platform build.\r
+#  * The platform may also choose to use this driver but modify the ASL file.\r
+#\r
+#  Copyright (c) Microsoft Corporation\r
+#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
+#\r
+#  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = PrmSsdtInstallDxe\r
+  FILE_GUID                      = B0423E2F-3B2C-4A36-BF98-3EB3B4B7CB0E\r
+  MODULE_TYPE                    = DXE_DRIVER\r
+  VERSION_STRING                 = 1.0\r
+  ENTRY_POINT                    = PrmSsdtInstallEntryPoint\r
+\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64 EBC\r
+#\r
+\r
+[Sources]\r
+  PrmSsdtInstallDxe.c\r
+  Prm.asl\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
+  PrmPkg/PrmPkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  BaseMemoryLib\r
+  DebugLib\r
+  DxeServicesLib\r
+  UefiBootServicesTableLib\r
+  UefiDriverEntryPoint\r
+\r
+[Pcd]\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId            ## CONSUMES\r
+\r
+[Protocols]\r
+  gEfiAcpiTableProtocolGuid\r
+\r
+[Depex]\r
+  gEfiAcpiTableProtocolGuid\r