## @file
#  Firmware Block Services to support emulating non-volatile variables
#  by pretending that a memory buffer is storage for the NV variables.
#
#  Copyright (c) 2008 - 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                      = EmuVariableFvbRuntimeDxe
  FILE_GUID                      = 22dc2b60-fe40-42ac-b01f-3ab1fad9aad8
  MODULE_TYPE                    = DXE_RUNTIME_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = FvbInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  Fvb.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  OvmfPkg/OvmfPkg.dec

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  DebugLib
  DxeServicesTableLib
  HobLib
  MemoryAllocationLib
  PcdLib
  PlatformFvbLib
  UefiBootServicesTableLib
  UefiDriverEntryPoint
  UefiLib
  UefiRuntimeLib

[Guids]
  gEfiEventVirtualAddressChangeGuid             # ALWAYS_CONSUMED  Create Event: EVENT_GROUP_GUID

[Protocols]
  gEfiFirmwareVolumeBlock2ProtocolGuid          # PROTOCOL ALWAYS_PRODUCED
  gEfiDevicePathProtocolGuid                    # PROTOCOL ALWAYS_PRODUCED

[FixedPcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase
  gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved

[FeaturePcd]
  gUefiOvmfPkgTokenSpaceGuid.PcdSecureBootEnable

[Depex]
  TRUE

