#/** @file
# Emulation Variable for EFI_RUNTIME_SERVICES.
#
# This module provides three EFI_RUNTIME_SERVICES: SetVariable, GetVariable, GetNextVariableName
# Copyright (c) 2006 - 2007, Intel Corporation
#
#  All rights reserved. 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                      = EmuVariableRuntimeDxe
  FILE_GUID                      = 02B01AD5-7E59-43e8-A6D8-238180613A5A
  MODULE_TYPE                    = DXE_RUNTIME_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = VariableServiceInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 EBC
#

[Sources.common]
  InitVariable.c
  EmuVariable.c
  Variable.h


[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec


[LibraryClasses]
  BaseLib
  UefiLib
  UefiBootServicesTableLib
  UefiDriverEntryPoint
  UefiRuntimeLib
  DebugLib
  MemoryAllocationLib
  BaseMemoryLib


[Protocols]
  gEfiVariableArchProtocolGuid                  ## PRODUCES
  gEfiVariableWriteArchProtocolGuid             ## PRODUCES

[Guids]
  gEfiEventVirtualAddressChangeGuid             ## PRODUCES ## Event
  gEfiGlobalVariableGuid                        ## PRODUCES ## Variable Guid
  gEfiVariableGuid

[Pcd.common]
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize
  gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize
  gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics
  gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize

[Depex]
  TRUE

# [Event]
#   ##
#   # Event will be signaled for VIRTUAL_ADDRESS_CHANGE event.
#   #
#   EVENT_TYPE_NOTIFY_SIGNAL                    ## PRODUCES
#
#