## @file
# This package contains the common QEMU modules
#
# Copyright (C) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
##

[Defines]
  DEC_SPECIFICATION           = 0x00010017
  PACKAGE_NAME                = QemuPkg
  PACKAGE_GUID                = 399B7613-96C3-44E2-92B5-5843AD5E05D8
  PACKAGE_VERSION             = 0.1

[Includes]
  Include

[LibraryClasses]
  ##  @libraryclass  Provides services to work with PCI capabilities in PCI
  #                  config space.
  PciCapLib|Include/Library/PciCapLib.h

  ##  @libraryclass  Layered on top of PciCapLib, allows clients to plug a
  #                  PciSegmentLib backend into PciCapLib, for config space
  #                  access.
  PciCapPciSegmentLib|Include/Library/PciCapPciSegmentLib.h

  ##  @libraryclass  Layered on top of PciCapLib, allows clients to plug an
  #                  EFI_PCI_IO_PROTOCOL backend into PciCapLib, for config
  #                  space access.
  PciCapPciIoLib|Include/Library/PciCapPciIoLib.h

  ##  @libraryclass  Get information about Xen
  #
  XenPlatformLib|Include/Library/XenPlatformLib.h

  ##  @libraryclass  Declares utility functions for virtio device drivers.
  VirtioLib|Include/Library/VirtioLib.h

  ##  @libraryclass  Access QEMU's firmware configuration interface
  #
  QemuFwCfgLib|Include/Library/QemuFwCfgLib.h

[Guids]
  gQemuPkgTokenSpaceGuid              = {0xe3e3cd6f, 0x384b, 0x476b, {0x81, 0xa2, 0x39, 0x44, 0xd9, 0xaf, 0xd8, 0xc3}}
  gEfiXenInfoGuid                     = {0xd3b46f3b, 0xd441, 0x1244, {0x9a, 0x12, 0x0, 0x12, 0x27, 0x3f, 0xc1, 0x4d}}
  gRootBridgesConnectedEventGroupGuid = {0x24a2d66f, 0xeedd, 0x4086, {0x90, 0x42, 0xf2, 0x6e, 0x47, 0x97, 0xee, 0x69}}
   gVirtioMmioTransportGuid           = {0x837dca9e, 0xe874, 0x4d82, {0xb2, 0x9a, 0x23, 0xfe, 0x0e, 0x23, 0xd1, 0xe2}}

[PcdsFixedAtBuild]

  ## This PCD points to the file name GUID of the UI front page carried in this UEFI
  #  Platform can customize the PCD to point to different application for UI support
  #  Note that this application will be booted POST ready to boot, thus certain security
  #  boundary limitations apply.
  # @Prompt UI Front Page File
  gQemuPkgTokenSpaceGuid.PcdUIApplicationFile|{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }|VOID*|0x1

  ## When VirtioScsiDxe is instantiated for a HBA, the numbers of targets and
  #  LUNs are retrieved from the host during virtio-scsi setup.
  #  MdeModulePkg/Bus/Scsi/ScsiBusDxe then scans all MaxTarget * MaxLun
  #  possible devices. This can take extremely long, for example with
  #  MaxTarget=255 and MaxLun=16383. The *inclusive* constants below limit
  #  MaxTarget and MaxLun, independently, should the host report higher values,
  #  so that scanning the number of devices given by their product is still
  #  acceptably fast.
  gQemuPkgTokenSpaceGuid.PcdVirtioScsiMaxTargetLimit|31|UINT16|0x2
  gQemuPkgTokenSpaceGuid.PcdVirtioScsiMaxLunLimit|7|UINT32|0x3

[PcdsFixedAtBuild, PcdsDynamic, PcdsDynamicEx]
  gQemuPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId|0|UINT16|0x10

[PcdsDynamic, PcdsDynamicEx]
  ## This PCD tracks where PcdVideo{Horizontal,Vertical}Resolution
  #  values are coming from.
  #    0 - unset (defaults from platform dsc)
  #    1 - set from PlatformConfig
  #    2 - set by GOP Driver.
  gQemuPkgTokenSpaceGuid.PcdVideoResolutionSource|0|UINT8|0x64

[PcdsFeatureFlag]
  gQemuPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation|TRUE|BOOLEAN|0x20
  gQemuPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation|FALSE|BOOLEAN|0x21

  ## This feature flag enables SMM/SMRAM support. Note that it also requires
  #  such support from the underlying QEMU instance; if that support is not
  #  present, the firmware will reject continuing after a certain point.
  #
  #  The flag also acts as a general "security switch"; when TRUE, many
  #  components will change behavior, with the goal of preventing a malicious
  #  runtime OS from tampering with firmware structures (special memory ranges
  #  used by OVMF, the varstore pflash chip, LockBox etc).
  gQemuPkgTokenSpaceGuid.PcdSmmSmramRequire|FALSE|BOOLEAN|0x22
  gQemuPkgTokenSpaceGuid.PcdEnableMemoryProtection|TRUE|BOOLEAN|0x23

[Ppis]
  # PPI whose presence in the PPI database signals that the TPM base address
  # has been discovered and recorded
  gQemuPkgTpmDiscoveredPpiGuid             = {0xb9a61ad0, 0x2802, 0x41f3, {0xb5, 0x13, 0x96, 0x51, 0xce, 0x6b, 0xd5, 0x75}}

  # This PPI signals that accessing the MMIO range of the TPM is possible in
  # the PEI phase, regardless of memory encryption
  gQemuTpmMmioAccessiblePpiGuid            = {0x35c84ff2, 0x7bfe, 0x453d, {0x84, 0x5f, 0x68, 0x3a, 0x49, 0x2c, 0xf7, 0xb7}}

[Protocols]
  gVirtioDeviceProtocolGuid = {0xfa920010, 0x6785, 0x4941, {0xb6, 0xec, 0x49, 0x8c, 0x57, 0x9f, 0x16, 0x0a}}
