## @file  PrmPkg.dec
# This package provides support for the Platform Runtime Mechanism (PRM).
#
# The following key elements of PRM are maintained in this package:
#
# 1. PRM interfaces - Comprised of interfaces shared with the operating system such as ACPI table structures
#                     in addition to internal firmware interfaces such as protocols and library interfaces.
#
# 2. PRM generic drivers - EDK II drivers that implement generic functionality such that a platform can quickly
#                          and reliably adopt PRM.
#
# 3. PRM module - An independently updatable PE/COFF binary that conforms to the unique requirements of a PRM module.
#                 PRM modules expose functions for operating system invocation referred to as PRM handlers.
#
# 4. PRM handler - A function in a PRM module. The function is identified through PRM interfaces in the OS by a GUID.
#
# Copyright (c) Microsoft Corporation<BR>
## SPDX-License-Identifier: BSD-2-Clause-Patent
##

[Defines]
  DEC_SPECIFICATION              = 0x00010005
  PACKAGE_NAME                   = PrmPkg
  PACKAGE_UNI_FILE               = PrmPkg.uni
  PACKAGE_GUID                   = 3D22F66E-9090-46CE-B260-1836070AFA5E
  PACKAGE_VERSION                = 0.1

[Includes]
  Include

[Guids]
  gPrmPkgTokenSpaceGuid = { 0x46f56acc, 0x600b, 0x450f, { 0xa5, 0x9c, 0x3a, 0x1a, 0x4a, 0xd4, 0x35, 0x3e }}
  gPrmHiiGuid = { 0xee4cd885, 0xd104, 0x4056, { 0x84, 0xba, 0x46, 0x18, 0x82, 0xa7, 0x2a, 0x18 }}

[LibraryClasses]
  ## @libraryclass Provides a general abstraction for PRM context buffer management
  #
  PrmContextBufferLib|Include/Library/PrmContextBufferLib.h

  ## @libraryclass Provides functionality to discover PRM modules installed by platform firmware
  #
  PrmModuleDiscoveryLib|Include/Library/PrmModuleDiscoveryLib.h

  ## @libraryclass Provides additional PE/COFF functionality needed to support the Platform Runtime Mechanism (PRM) loader driver.
  #
  PrmPeCoffLib|Include/Library/PrmPeCoffLib.h

[Protocols]
  ## PRM Configuration Protocol
  #
  gPrmConfigProtocolGuid = { 0x4e5b4fea, 0x936a, 0x45bc, { 0xac, 0x6a, 0x2f, 0x8f, 0x14, 0xa6, 0xc2, 0x9e }}

[PcdsFixedAtBuild]
  ## Flash base address of a PRM firmware volume
  gPrmPkgTokenSpaceGuid.PcdFlashFvPrmBase|0x00000000|UINT32|0x00000001

  ## Size in bytes of a PRM firmware volume
  gPrmPkgTokenSpaceGuid.PcdFlashFvPrmSize|0x00000000|UINT32|0x00000002

  ## Print PRM handler execution time in PrmInfo
  #
  #  Provides an option to disable usage of a timer library to record PRM handler
  #  execution time. In most cases, the platform should provide a valid TimerLib
  #  instance that can be used when the application is built with that package to
  #  report PRM handler execution time in the application. If such a TimerLib
  #  instance is not available, set this PCD to FALSE in the package DSC file.
  gPrmPkgTokenSpaceGuid.PcdPrmInfoPrintHandlerExecutionTime|TRUE|BOOLEAN|0x00000003
