## @file
#  Implementation of CPU I/O 2 Protocol based on Framework CPU I/O Protocol.
#
#  Intel's Framework CPU I/O Protocol is replaced by CPU I/O 2 Protocol in PI.
#  This module produces PI CPU I/O 2 Protocol on top of Framework CPU I/O Protocol.
#
#  Copyright (c) 2009 - 2010, 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                      = CpuIo2OnCpuIoThunk
  FILE_GUID                      = 503E70FE-047A-410B-A55F-4F63C9382C1E
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0

  ENTRY_POINT                    = CpuIo2OnCpuIoThunkInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  CpuIo2OnCpuIoThunk.c
  CpuIo2OnCpuIoThunk.h

[Packages]
  MdePkg/MdePkg.dec
  IntelFrameworkPkg/IntelFrameworkPkg.dec
  EdkCompatibilityPkg/EdkCompatibilityPkg.dec

[LibraryClasses]
  UefiDriverEntryPoint
  DebugLib
  UefiBootServicesTableLib

[Protocols]
  gEfiCpuIo2ProtocolGuid         ## PRODUCES
  gEfiCpuIoProtocolGuid          ## CONSUMES

[Depex]
  gEfiCpuIoProtocolGuid
