--- /dev/null
+/** @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
This file contains the implementation for a Platform Runtime Mechanism (PRM)\r
loader driver.\r
\r
+ Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
Copyright (c) Microsoft Corporation\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
#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
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
}\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