## @file  SourceLevelDebugPkg.dec
# This package provides target side modules to support source level debug.
# The target side components includes the Debug Agent Library instance
# to communicate with host side modules, Debug Communication Library and
# instances to provide the communication I/O functions between Debug Agent
# and host, PeCoffExtraActionLib instance to report symbol path information,
# etc.
#
# Copyright (c) 2010 - 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 that 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]
  DEC_SPECIFICATION              = 0x00010005
  PACKAGE_NAME                   = SourceLevelDebugPkg
  PACKAGE_UNI_FILE               = SourceLevelDebugPkg.uni
  PACKAGE_GUID                   = DBF00C27-D8D7-443d-918B-4E85CDA1373B
  PACKAGE_VERSION                = 0.96

[Includes]
  Include

[Includes.IA32]
  Include/Ia32

[Includes.X64]
  Include/Ia32

[LibraryClasses]
  ##  @libraryclass  Provides communication I/O functions between Debug Agent and HOST.
  ##
  DebugCommunicationLib|Include/Library/DebugCommunicationLib.h

[Guids]
  ## MdeModule package token space guid
  # Include/Guid/DebugAgentGuid.h
  gEfiDebugAgentGuid       = {0x865a5a9b, 0xb85d, 0x474c, { 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2 }}
  gEfiSourceLevelDebugPkgTokenSpaceGuid = {0x865a5aab, 0xb85d, 0x474c, { 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2 }}

#
# [Error.gEfiSourceLevelDebugPkgTokenSpaceGuid]
#   0x80000001 | Invalid value provided.
#

[PcdsFixedAtBuild, PcdsPatchableInModule]
  ## The memory BAR of usb debug port, it may be different with the memory bar of ehci host controller.
  #  Note that the memory BAR address is only used before Pci bus resource allocation.
  # @Prompt Configure usb debug port memory BAR.
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbDebugPortMemorySpaceBase|0xd0000000|UINT32|0x00000001

  ## The memory BAR of ehci host controller, in which usb debug feature is enabled.
  #  Note that the memory BAR address is only used before Pci bus resource allocation.
  # @Prompt Configure ehci host controller memory BAR.
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbEhciMemorySpaceBase|0xd0000000|UINT32|0x00000002

  ## The pci address of ehci host controller, in which usb debug feature is enabled.
  #  The format of pci address is :<BR>
  #      -----------------------------------------------------------------------<BR>
  #      | Bits 28..31 | Bits 20..27 | Bits 15..19 | Bits 12..14 | Bits 00..11 |<BR>
  #      -----------------------------------------------------------------------<BR>
  #      |      0      |     Bus     |   Device    |   Function  |      0      |<BR>
  #      -----------------------------------------------------------------------<BR>
  #  For the value 0x000EF000, it means the pci address at bus 0x0, device 0x1D, function 0x7.
  # @Prompt Configure ehci host controller pci address.
  # @Expression  0x80000001 | (gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbEhciPciAddress & 0xF0000FFF) == 0
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbEhciPciAddress|0x000EF000|UINT32|0x00000003

  ## The mask of exception numbers whose handlers would be ignored and cannot be replaced or
  #  hooked by Debug Agent Library. Masking INT1/INT3 is invalid.
  # @Prompt Configure exception numbers not to be hooked by Debug Agent.
  # @Expression  0x80000001 | (gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdExceptionsIgnoredByDebugger & 0xA) == 0
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdExceptionsIgnoredByDebugger|0x00000000|UINT32|0x00000004

  ## The method to issue break point to Debug Agent Library when Loading/UnLoading image.<BR><BR>
  #  1: Use I/O Port 84 to issue hardware break point<BR>
  #  2: Use INT3 to issue software break point<BR>
  # @Prompt Configure Loading/UnLoading image break method.
  # @ValidRange  0x80000001 | 1 - 2
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x1|UINT8|0x00000005

  ## The data buffer size used by debug port in debug communication library instances.
  #  Its value is not suggested to be changed in platform DSC file.
  # @Prompt Assign debug port buffer size.
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugPortHandleBufferSize|0x0|UINT16|0x00000006

  ## The memory BAR of xhci host controller, in which usb debug feature is enabled.
  ## Note that the memory BAR address is only used before Pci bus resource allocation.
  # @Prompt Configure xhci host controller memory BAR.
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbXhciMemorySpaceBase|0xD0000000|UINT64|0x00000007

  ## The pci address of xhci host controller, in which usb debug feature is enabled.
  #  The format of pci address is :<BR>
  #      -----------------------------------------------------------------------<BR>
  #      | Bits 28..31 | Bits 20..27 | Bits 15..19 | Bits 12..14 | Bits 00..11 |<BR>
  #      -----------------------------------------------------------------------<BR>
  #      |      0      |     Bus     |   Device    |   Function  |      0      |<BR>
  #      -----------------------------------------------------------------------<BR>
  #  For the value 0x000A0000, it means the pci address at bus 0x0, device 0x14, function 0x0.
  # @Prompt Configure xhci host controller pci address.
  # @Expression  0x80000001 | (gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbXhciPciAddress & 0xF0000FFF) == 0
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbXhciPciAddress|0x000A0000|UINT32|0x00000008

  ## Per XHCI spec, software shall impose a timeout between the detection of the Debug Host
  ## connection and the DbC Run transition to 1. This PCD specifies the timeout value in microsecond.
  # @Prompt Configure debug device detection timeout value.
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbXhciDebugDetectTimeout|3000000|UINT64|0x00000009

  ## Default revision of the debug agent transfer protocol.
  #  The upper 16 bits indicate the major revision and the lower 16 bits indicate the minor revision.
  #  For example, a value of 0x00000004 stands for revision 0.4.
  #  Debug packet compression and decompression is supported since revision 0.4.
  # @Prompt Default revision of the debug agent transfer protocol.
  gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdTransferProtocolRevision|0x00000004|UINT32|0x0000000a

[UserExtensions.TianoCore."ExtraFiles"]
  SourceLevelDebugPkgExtra.uni
