## @file
#  Provides SMM variable service.
#
#  This module installs SMM variable protocol into SMM protocol database,
#  which can be used by SMM driver, and installs SMM variable protocol
#  into BS protocol database, which can be used to notify the SMM Runtime
#  Dxe driver that the SMM variable service is ready.
#  This module should be used with SMM Runtime DXE module together. The
#  SMM Runtime DXE module would install variable arch protocol and variable
#  write arch protocol based on SMM variable module.
#
#  Caution: This module requires additional review when modified.
#  This driver will have external input - variable data and communicate buffer in SMM mode.
#  This external input must be validated carefully to avoid security issues such as
#  buffer overflow or integer overflow.
#    The whole SMM authentication variable design relies on the integrity of flash part and SMM.
#  which is assumed to be protected by platform.  All variable code and metadata in flash/SMM Memory
#  may not be modified without authorization. If platform fails to protect these resources,
#  the authentication service provided in this driver will be broken, and the behavior is undefined.
#
# Copyright (c) 2010 - 2017, 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                      = VariableSmm
  MODULE_UNI_FILE                = VariableSmm.uni
  FILE_GUID                      = 23A089B3-EED5-4ac5-B2AB-43E3298C2343
  MODULE_TYPE                    = DXE_SMM_DRIVER
  VERSION_STRING                 = 1.0
  PI_SPECIFICATION_VERSION       = 0x0001000A
  ENTRY_POINT                    = VariableServiceInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64
#


[Sources]
  Variable.c
  VariableSmm.c
  VarCheck.c
  Variable.h
  VariableExLib.c
  TcgMorLockSmm.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

  GeminilakeSiliconPkg/GeminilakeSiliconPkg.dec
  # For:
  #  - Protocol: gEdkiiVariableStorageProtocolGuid
  #  - Protocol: gEdkiiSmmVariableStorageSelectorProtocolGuid
  #  - Protocol: gEdkiiVariableStorageSupportProtocolGuid

[LibraryClasses]
  UefiDriverEntryPoint
  MemoryAllocationLib
  BaseLib
  SynchronizationLib
  UefiLib
  SmmServicesTableLib
  BaseMemoryLib
  DebugLib
  DxeServicesTableLib
  HobLib
  PcdLib
  SmmMemLib
  AuthVariableLib
  VarCheckLib

[Protocols]
  gEdkiiVariableStorageProtocolGuid             ## CONSUMES
  gEdkiiSmmVariableStorageSelectorProtocolGuid  ## CONSUMES
  ## PRODUCES
  ## UNDEFINED # SmiHandlerRegister
  gEfiSmmVariableProtocolGuid
  gEfiSmmEndOfDxeProtocolGuid                   ## NOTIFY
  gEdkiiSmmVarCheckProtocolGuid                 ## PRODUCES
  gEdkiiSmmVariableProtocolGuid                 ## PRODUCES
  gEdkiiVariableStorageSupportProtocolGuid      ## PRODUCES

[Guids]
  ## PRODUCES             ## GUID # Signature of Variable store header
  ## CONSUMES             ## GUID # Signature of Variable store header
  ## SOMETIMES_CONSUMES   ## HOB
  ## SOMETIMES_PRODUCES   ## SystemTable
  gEfiAuthenticatedVariableGuid

  ## PRODUCES             ## GUID # Signature of Variable store header
  ## CONSUMES             ## GUID # Signature of Variable store header
  ## SOMETIMES_CONSUMES   ## HOB
  ## SOMETIMES_PRODUCES   ## SystemTable
  gEfiVariableGuid

  ## SOMETIMES_CONSUMES   ## Variable:L"PlatformLang"
  ## SOMETIMES_PRODUCES   ## Variable:L"PlatformLang"
  ## SOMETIMES_CONSUMES   ## Variable:L"Lang"
  ## SOMETIMES_PRODUCES   ## Variable:L"Lang"
  gEfiGlobalVariableGuid

  gEfiMemoryOverwriteControlDataGuid            ## CONSUMES   ## Variable:L"MemoryOverwriteRequestControl"
  gEfiMemoryOverwriteRequestControlLockGuid     ## PRODUCES   ## Variable:L"MemoryOverwriteRequestControlLock"

  gSmmVariableWriteGuid                         ## PRODUCES             ## GUID # Install protocol
  gEdkiiVarErrorFlagGuid                        ## CONSUMES             ## GUID
  gZeroGuid                                     ## SOMETIMES_CONSUMES   ## GUID

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize                      ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize                  ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize         ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize                    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize                     ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxUserNvVariableSpaceSize           ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdBoottimeReservedNvVariableSpaceSize  ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdReclaimVariableSpaceAtEndOfDxe       ## CONSUMES
  gSiPkgTokenSpaceGuid.PcdNvVariableEmulationMode                        ## CONSUMES

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics        ## CONSUMES  # Variable statistic information
  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangDeprecate       ## CONSUMES  # Auto update PlatformLang/Lang

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  VariableSmmExtra.uni
