#/** @file
#  
#  General BDS defines and produce general interfaces for platform BDS driver including:
#  1) BDS boot policy interface;
#  2) BDS boot device connect interface;
#  3) BDS Misc interfaces for mainting boot variable, ouput string, etc.
#  
#  Copyright (c) 2007 - 2009, Intel Corporation. <BR>
#  All rights reserved. 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                      = GenericBdsLib
  FILE_GUID                      = e405ec31-ccaa-4dd4-83e8-0aec01703f7e
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = GenericBdsLib|DXE_DRIVER UEFI_APPLICATION 

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources.common]
  DevicePath.c
  Performance.c
  BdsConnect.c
  BdsMisc.c
  BdsConsole.c
  BdsBoot.c
  InternalBdsLib.h
  Bmp.h
  
[Sources.IPF]
  Ipf/ShadowRom.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  IntelFrameworkPkg/IntelFrameworkPkg.dec
  IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec

[LibraryClasses]
  DevicePathLib
  PeCoffGetEntryPointLib
  BaseLib
  HobLib
  UefiRuntimeServicesTableLib
  DxeServicesTableLib
  MemoryAllocationLib
  UefiLib
  UefiBootServicesTableLib
  BaseMemoryLib
  DebugLib
  PrintLib
  PcdLib
  PerformanceLib
  TimerLib
  PcdLib
  DxeServicesLib

[Guids]
  gEfiVT100PlusGuid                             ## CONSUMES ## GUID (The type of terminal)
  gEfiVT100Guid                                 ## CONSUMES ## GUID (The type of terminal)
  gEfiMemoryTypeInformationGuid                 ## CONSUMES ## GUID (The identifier of memory type information type in system table)
                                                ## CONSUMES ## GUID HOB (The hob holding memory type information)
  gEfiVTUTF8Guid                                ## CONSUMES ## GUID (The type of terminal)
  gEfiGlobalVariableGuid                        ## SOMETIMES_PRODUCES ## Variable:L"BootCurrent" (The boot option of current boot)
                                                ## SOMETIMES_CONSUMES ## Variable:L"BootXX" (Boot option variable)
                                                ## CONSUMES           ## Variable:L"Timeout" (The time out value in second of showing progress bar)
                                                ## SOMETIMES_CONSUMES ## Variable:L"BootOrder" (The boot option array)
                                                ## SOMETIMES_CONSUMES ## Variable:L"DriverOrder" (The driver order list)
                                                ## SOMETIMES_CONSUMES ## Variable:L"ConIn" (The device path of console in device)
                                                ## SOMETIMES_CONSUMES ## Variable:L"ConOut" (The device path of console out device)
                                                ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device)
  gEfiFileInfoGuid                              ## CONSUMES ## GUID
  gEfiPcAnsiGuid                                ## CONSUMES ## GUID (The type of terminal)
  gPerformanceProtocolGuid                      ## SOMETIMES_PRODUCES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data)
  gEfiUartDevicePathGuid                        ## CONSUMES ## GUID (Identify the device path for UARD device)
  gEfiSasDevicePathGuid                         ## CONSUMES ## GUID (Identify the device path for SAS device)

[Protocols]
  gEfiSimpleFileSystemProtocolGuid              # PROTOCOL CONSUMES
  gEfiSimpleTextOutProtocolGuid                 # PROTOCOL CONSUMES
  gEfiPciIoProtocolGuid                         # PROTOCOL CONSUMES
  gEfiLoadedImageProtocolGuid                   # PROTOCOL CONSUMES
  gEfiDevicePathToTextProtocolGuid              # PROTOCOL SOMETIMES_CONSUMES
  gEfiSimpleNetworkProtocolGuid                 # PROTOCOL CONSUMES
  gEfiDebugPortProtocolGuid                     # PROTOCOL CONSUMES
  gEfiSimpleTextInProtocolGuid                  # PROTOCOL CONSUMES
  gEfiBlockIoProtocolGuid                       # PROTOCOL CONSUMES
  gEfiFirmwareVolume2ProtocolGuid               # PROTOCOL CONSUMES
  gEfiLegacyBiosProtocolGuid                    # PROTOCOL SOMETIMES_CONSUMES
  gEfiCpuArchProtocolGuid                       # PROTOCOL CONSUMES
  gEfiDevicePathProtocolGuid                    # PROTOCOL CONSUMES
  gEfiAcpiS3SaveProtocolGuid                    # PROTOCOL CONSUMES
  gEfiGraphicsOutputProtocolGuid                # PROTOCOL SOMETIMES_CONSUMES
  gEfiUgaDrawProtocolGuid |PcdUgaConsumeSupport # PROTOCOL SOMETIMES_CONSUMES
  gEfiOEMBadgingProtocolGuid                    # PROTOCOL CONSUMES
  gEfiHiiFontProtocolGuid                       # PROTOCOL CONSUMES
  gEfiSecurityArchProtocolGuid                  # PROTOCOL CONSUMES

[FeaturePcd]
  gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport

[Pcd]
  gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile
