## @file
#  This driver installs SMBIOS information for OVMF
#
#  Copyright (c) 2011, Bei Guan <gbtju85@gmail.com>
#  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
#
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution. The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = SmbiosPlatformDxe
  FILE_GUID                      = 4110465d-5ff3-4f4b-b580-24ed0d06747a
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0

  ENTRY_POINT                    = SmbiosTablePublishEntry

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
#

[Sources]
  SmbiosPlatformDxe.h
  SmbiosPlatformDxe.c
  Qemu.c

[Sources.IA32, Sources.X64]
  X86Xen.c

[Sources.ARM, Sources.AARCH64]
  ArmXen.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  OvmfPkg/OvmfPkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  BaseMemoryLib
  BaseLib
  UefiDriverEntryPoint
  DebugLib
  HobLib
  QemuFwCfgLib
  MemoryAllocationLib
  PcdLib

[Pcd]
  gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated

[Protocols]
  gEfiSmbiosProtocolGuid                      # PROTOCOL ALWAYS_CONSUMED

[Guids]
  gEfiXenInfoGuid

[Depex]
  gEfiSmbiosProtocolGuid

