diff --git a/PrmPkg/PrmLoaderDxe/Prm.asl b/PrmPkg/PrmLoaderDxe/Prm.asl new file mode 100644 index 0000000000..76b56de732 --- /dev/null +++ b/PrmPkg/PrmLoaderDxe/Prm.asl @@ -0,0 +1,87 @@ +/** @file + The definition block in ACPI table for PRM Operation Region + + Copyright (c) 2020, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +DefinitionBlock ( + "Prm.aml", + "SSDT", + 0x01, + "OEMID", + "PRMOPREG", + 0x3000 + ) +{ + Scope (\_SB) + { + // + // PRM Bridge Device + // + + Device (PRMB) + { + Name (_HID, "80860222") + Name (_CID, "80860222") + Name (_DDN, "PRM Bridge Device") + Name (_STA, 0xF) + OperationRegion (OPR1, 0x80, 0, 16) + Field (OPR1, DWordAcc, NoLock, Preserve) //Make it ByteAcc for parameter validation + { + Var0, 128 + } + Method (SETV, 1, Serialized) + { + CopyObject (Arg0, \_SB.PRMB.Var0) + } + } + + // + // PRM Test Device + // + + Device (PRMT) + { + Name (_HID, "80860223") + Name (_CID, "80860223") + Name (_DDN, "PRM Test Device") + Name (_STA, 0xF) + Name (BUF1, Buffer(16) + { + 0x5F, 0xAD, 0xF2, 0xD5, 0x47, 0xA3, 0x3E, 0x4D, //Guid_0 + 0x87, 0xBC, 0xC2, 0xCE, 0x63, 0x02, 0x9C, 0xC8, //Guid_1 + }) + Name (BUF2, Buffer(16) + { + 0xC3, 0xAD, 0xE7, 0xA9, 0xD0, 0x8C, 0x9A, 0x42, //Guid_0 + 0x89, 0x15, 0x10, 0x94, 0x6E, 0xBD, 0xE3, 0x18, //Guid_1 + }) + Name (BUF3, Buffer(16) + { + 0x14, 0xC2, 0x88, 0xB6, 0x81, 0x40, 0xEB, 0x4E, //Guid_0 + 0x8D, 0x26, 0x1E, 0xB5, 0xA3, 0xBC, 0xF1, 0x1A, //Guid_1 + }) + Method (NTST) + { + \_SB.PRMB.SETV (BUF1) + } + Method (TST1) + { + \_SB.PRMB.SETV (BUF1) + } + Method (TST2) + { + \_SB.PRMB.SETV (BUF2) + } + Method (TST3) + { + \_SB.PRMB.SETV (BUF3) + } + } + } + +} // End of Definition Block + + + diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c index 5fda4c1b01..5e14b8e09d 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c @@ -3,6 +3,7 @@ This file contains the implementation for a Platform Runtime Mechanism (PRM) loader driver. + Copyright (c) 2020, Intel Corporation. All rights reserved.
Copyright (c) Microsoft Corporation SPDX-License-Identifier: BSD-2-Clause-Patent @@ -19,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -809,6 +811,8 @@ PublishPrmAcpiTable ( EFI_STATUS Status; EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; UINTN TableKey; + EFI_ACPI_DESCRIPTION_HEADER *Ssdt; + UINTN SsdtSize; if (PrmAcpiDescriptionTable == NULL || PrmAcpiDescriptionTable->Header.Signature != PRM_TABLE_SIGNATURE) { return EFI_INVALID_PARAMETER; @@ -832,6 +836,36 @@ PublishPrmAcpiTable ( } ASSERT_EFI_ERROR (Status); + // + // Load SSDT + // + Status = GetSectionFromFv ( + &gEfiCallerIdGuid, + EFI_SECTION_RAW, + 0, + (VOID **) &Ssdt, + &SsdtSize + ); + ASSERT_EFI_ERROR (Status); + DEBUG ((DEBUG_INFO, "%a %a: SSDT loaded ...\n", _DBGMSGID_, __FUNCTION__)); + + // + // Update OEM ID + // + CopyMem (&Ssdt->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (Ssdt->OemId)); + + // + // Publish the SSDT. Table is re-checksumed. + // + TableKey = 0; + Status = AcpiTableProtocol->InstallAcpiTable ( + AcpiTableProtocol, + Ssdt, + SsdtSize, + &TableKey + ); + ASSERT_EFI_ERROR (Status); + return Status; } diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf index 643e1a7989..016ced4b37 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf @@ -5,6 +5,7 @@ # PRM handlers within those modules into a PRMT ACPI table such that the handlers are # made available for invocation in the OS. # +# Copyright (c) 2020, Intel Corporation. All rights reserved.
# Copyright (c) Microsoft Corporation # # SPDX-License-Identifier: BSD-2-Clause-Patent @@ -23,6 +24,7 @@ PrmAcpiTable.h PrmLoader.h PrmLoaderDxe.c + Prm.asl [Packages] MdePkg/MdePkg.dec @@ -42,6 +44,8 @@ UefiBootServicesTableLib UefiDriverEntryPoint UefiLib + DxeServicesLib + PcdLib [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId ## CONSUMES