## @file
#  Define and produce general Boot Manager related interfaces.
#
#  The implementation provides richful library functions supporting load option
#  manipulation, hotkey registration, UEFI boot, connect/disconnect, console
#  manipulation, driver health checking and etc.
#
#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
#  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<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                      = UefiBootManagerLib
  MODULE_UNI_FILE                = UefiBootManagerLib.uni
  FILE_GUID                      = 8D4752BC-595E-49a2-B4AF-F3F57B601DE9
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = UefiBootManagerLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER 

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  BmConnect.c
  BmMisc.c
  BmConsole.c
  BmBoot.c
  BmBootDescription.c
  BmLoadOption.c
  BmHotkey.c
  BmDriverHealth.c
  InternalBm.h
  
[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  HobLib
  PcdLib
  BaseLib
  UefiLib
  DebugLib
  PrintLib
  BaseMemoryLib
  DevicePathLib
  PerformanceLib
  PeCoffGetEntryPointLib
  UefiBootServicesTableLib
  UefiRuntimeServicesTableLib
  DxeServicesTableLib
  MemoryAllocationLib
  DxeServicesLib
  ReportStatusCodeLib
  PerformanceLib
  HiiLib
  SortLib

[Guids]
  ## SOMETIMES_CONSUMES ## SystemTable (The identifier of memory type information type in system table)
  ## SOMETIMES_CONSUMES ## HOB (The hob holding memory type information)
  ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation."
  ## SOMETIMES_PRODUCES ## Variable:L"MemoryTypeInformation."
  gEfiMemoryTypeInformationGuid

  ## SOMETIMES_PRODUCES ## Variable:L"BootCurrent" (The boot option of current boot)
  ## SOMETIMES_CONSUMES ## Variable:L"BootXX" (Boot option variable)
  ## 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)
  gEfiGlobalVariableGuid

  gEdkiiStatusCodeDataTypeVariableGuid          ## SOMETIMES_CONSUMES ## GUID
  gEfiDiskInfoAhciInterfaceGuid                 ## SOMETIMES_CONSUMES ## GUID
  gEfiDiskInfoIdeInterfaceGuid                  ## SOMETIMES_CONSUMES ## GUID
  gEfiDiskInfoScsiInterfaceGuid                 ## SOMETIMES_CONSUMES ## GUID
  gEfiDiskInfoSdMmcInterfaceGuid                ## SOMETIMES_CONSUMES ## GUID

[Protocols]
  gEfiPciRootBridgeIoProtocolGuid               ## CONSUMES
  gEfiSimpleFileSystemProtocolGuid              ## SOMETIMES_CONSUMES
  gEfiLoadFileProtocolGuid                      ## SOMETIMES_CONSUMES
  gEfiSimpleTextOutProtocolGuid                 ## SOMETIMES_CONSUMES
  gEfiPciIoProtocolGuid                         ## SOMETIMES_CONSUMES
  gEfiLoadedImageProtocolGuid                   ## CONSUMES
  gEfiSimpleNetworkProtocolGuid                 ## SOMETIMES_CONSUMES
  gEfiSimpleTextInProtocolGuid                  ## SOMETIMES_CONSUMES
  gEfiBlockIoProtocolGuid                       ## SOMETIMES_CONSUMES
  gEfiFirmwareVolume2ProtocolGuid               ## SOMETIMES_CONSUMES
  gEfiDevicePathProtocolGuid                    ## SOMETIMES_CONSUMES
  gEfiBootLogoProtocolGuid                      ## SOMETIMES_CONSUMES
  gEfiSimpleTextInputExProtocolGuid             ## SOMETIMES_CONSUMES
  gEdkiiVariableLockProtocolGuid                ## SOMETIMES_CONSUMES
  gEfiGraphicsOutputProtocolGuid                ## SOMETIMES_CONSUMES
  gEfiUsbIoProtocolGuid                         ## SOMETIMES_CONSUMES
  gEfiNvmExpressPassThruProtocolGuid            ## SOMETIMES_CONSUMES
  gEfiDiskInfoProtocolGuid                      ## SOMETIMES_CONSUMES
  gEfiDriverHealthProtocolGuid                  ## SOMETIMES_CONSUMES
  gEfiFormBrowser2ProtocolGuid                  ## SOMETIMES_CONSUMES
  gEfiRamDiskProtocolGuid                       ## SOMETIMES_CONSUMES
  gEfiDeferredImageLoadProtocolGuid             ## SOMETIMES_CONSUMES

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange      ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderLoad                ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderStart               ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable                    ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile                     ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdDriverHealthConfigureForm               ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxRepairCount                          ## CONSUMES
