## @file
# This driver installs Debug Support protocol for the selected processor.
#
# This driver provides the capabilities for debug-agent to gain control of the machine
# when certain types of events occur, i.e. breakpoint, processor execptions, etc. It also
# provides debug-agent to periodically gain control during operation of the machine to
# check for asynchronous commands form the host.
#
# Copyright (c) 2006 - 2018, 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                      = DebugSupportDxe
  MODULE_UNI_FILE                = DebugSupportDxe.uni
  FILE_GUID                      = 911D584C-35F7-4955-BEF9-B452769DDC3A
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = InitializeDebugSupportDriver

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF
#

[Sources]
  DebugSupport.c

[Sources.Ia32]
  Ia32/DebugSupport.h
  Ia32/PlDebugSupport.c
  Ia32/PlDebugSupport.h
  Ia32/PlDebugSupportIa32.c
  Ia32/AsmFuncs.nasm

[Sources.X64]
  Ia32/DebugSupport.h
  Ia32/PlDebugSupport.c
  X64/PlDebugSupport.h
  X64/PlDebugSupportX64.c
  X64/AsmFuncs.nasm

[Sources.IPF]
  Ipf/PlDebugSupport.h
  Ipf/PlDebugSupport.c
  Ipf/Ds64Macros.i
  Ipf/Common.i
  Ipf/AsmFuncs.s


[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec


[LibraryClasses]
  UefiBootServicesTableLib
  MemoryAllocationLib
  BaseMemoryLib
  UefiDriverEntryPoint
  DebugLib

[LibraryClasses.IA32, LibraryClasses.X64]
  BaseLib

[Protocols]
  gEfiLoadedImageProtocolGuid                   ## CONSUMES
  gEfiDebugSupportProtocolGuid                  ## PRODUCES


[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  DebugSupportDxeExtra.uni
