## @file
#  PI SMM Status Code Protocol on Framework SMM Status Code Protocol Thunk driver.
#
#  Copyright (c) 2010 - 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                      = PiSmmStatusCodeOnFrameworkSmmStatusCodeThunk
  FILE_GUID                      = 14FF38A8-ACBA-4228-A7D7-A73260C7559B
  MODULE_TYPE                    = DXE_SMM_DRIVER
  PI_SPECIFICATION_VERSION       = 0x0001000A
  VERSION_STRING                 = 1.0  
  ENTRY_POINT                    = SmmStatusCodeThunkMain

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64
#

[Sources]
  PiSmmStatusCodeOnFrameworkSmmStatusCodeThunk.c
  PiSmmStatusCodeOnFrameworkSmmStatusCodeThunk.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  SmmServicesTableLib
  UefiDriverEntryPoint
  DebugLib
  BaseLib
  SynchronizationLib
  MemoryAllocationLib

[Protocols]
  gEfiSmmRscHandlerProtocolGuid               ## PRODUCES
  gEfiSmmStatusCodeProtocolGuid               ## PRODUCES/CONSUMES

[Depex]
  gEfiSmmStatusCodeProtocolGuid
