#/** @file
# Component description file for Base PCI Cf8 Library.
#
# PCI CF8 Library that uses I/O ports 0xCF8 and 0xCFC to perform PCI Configuration cycles.
#  Layers on top of an I/O Library instance.
# Copyright (c) 2007, 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                      = GdbSerialDebugPortLib
  FILE_GUID                      = 42ABB10A-660A-4BEC-AEFA-CC94AB4D993D
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = GdbSerialLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER

  CONSTRUCTOR                    = GdbSerialLibDebugPortConstructor


[Sources.common]
  GdbSerialDebugPortLib.c


[Packages]
  MdePkg/MdePkg.dec
  EmbeddedPkg/EmbeddedPkg.dec

[LibraryClasses]
  DebugLib
  IoLib

[Protocols.common]
  gEfiDebugPortProtocolGuid

[FixedPcd.common]
  gEmbeddedTokenSpaceGuid.PcdGdbBaudRate|115200
  gEmbeddedTokenSpaceGuid.PcdGdbDataBits|8
  gEmbeddedTokenSpaceGuid.PcdGdbParity|1
  gEmbeddedTokenSpaceGuid.PcdGdbStopBits|1
  gEmbeddedTokenSpaceGuid.PcdGdbMaxPacketRetryCount
