## @file
#  Boot Maintenance Manager Library used by UiApp.
#
#  Copyright (c) 2011 - 2015, 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]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = BootMaintenanceManagerUiLib
  MODULE_UNI_FILE                = BootMaintenanceManagerUiLib.uni
  FILE_GUID                      = CA9E4824-4198-4715-AA22-E2935E703A07
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = NULL|DXE_DRIVER UEFI_APPLICATION
  CONSTRUCTOR                    = BootMaintenanceManagerUiLibConstructor
  DESTRUCTOR                     = BootMaintenanceManagerUiLibDestructor
#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  BootMaintenanceManager.h
  BootMaintenanceManager.vfr
  BootMaintenanceManagerStrings.uni
  BootMaintenance.c
  FormGuid.h
  BootOption.c
  ConsoleOption.c
  Data.c
  Variable.c
  UpdatePage.c
  BmLib.c
  BootMaintenanceManagerCustomizedUi.c
  BootMaintenanceManagerCustomizedUi.h
  BootMaintenanceManagerCustomizedUiSupport.c
  BootMaintenanceManagerCustomizedUiSupport.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  DevicePathLib
  BaseLib
  UefiRuntimeServicesTableLib
  MemoryAllocationLib
  UefiLib
  UefiBootServicesTableLib
  BaseMemoryLib
  DebugLib
  PrintLib
  HiiLib
  UefiHiiServicesLib
  UefiBootManagerLib
  FileExplorerLib
  
[Guids]
  gEfiGlobalVariableGuid                        ## SOMETIMES_PRODUCES ## Variable:L"BootNext" (The number of next boot option)
                                                ## SOMETIMES_PRODUCES ## Variable:L"BootXX" (Boot option variable)
                                                ## SOMETIMES_PRODUCES ## Variable:L"PlatformLang" (Platform supported languange in Rfc4646 format)
                                                ## SOMETIMES_PRODUCES ## Variable:L"Lang" (Platform supported languange in Iso639 format)
                                                ## SOMETIMES_PRODUCES ## Variable:L"KeyXX" (Hotkey option variable)
                                                ## PRODUCES           ## Variable:L"HwErrRecSupport" (The level of platform supported hardware Error Record Persistence)
                                                ## SOMETIMES_PRODUCES ## Variable:L"BootOptionSupport" (The feature supported in boot option menu, value could be: EFI_BOOT_OPTION_SUPPORT_KEY, EFI_BOOT_OPTION_SUPPORT_APP
                                                ## SOMETIMES_PRODUCES (not PcdUefiVariableDefaultLangDeprecate)## Variable:L"LangCodes" (Value of PcdUefiVariableDefaultLangCodes)
                                                ## PRODUCES           ## Variable:L"PlatformLangCodes" (Value of PcdUefiVariableDefaultPlatformLangCodes)
                                                ## PRODUCES           ## Variable:L"Timeout" (The time out value in second of showing progress bar)
                                                ## SOMETIMES_PRODUCES ## Variable:L"BootOrder" (The boot option array)
                                                ## SOMETIMES_PRODUCES ## 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)
  gEfiFileSystemVolumeLabelInfoIdGuid           ## CONSUMES ## GUID (Indicate the information type is volume)
  gEfiFileInfoGuid                              ## CONSUMES ## GUID (Indicate the information type is file)
  gEfiIfrTianoGuid                              ## CONSUMES ## GUID (Extended IFR Guid Opcode)
  gEfiIfrFrontPageGuid                          ## CONSUMES ## GUID
  gEfiIfrBootMaintenanceGuid                    ## CONSUMES ## GUID
 
[Protocols]
  gEfiSimpleFileSystemProtocolGuid              ## CONSUMES
  gEfiLoadFileProtocolGuid                      ## CONSUMES
  gEfiHiiConfigAccessProtocolGuid               ## CONSUMES
  gEfiSerialIoProtocolGuid                      ## CONSUMES
  gEfiDevicePathToTextProtocolGuid              ## CONSUMES

[FeaturePcd]

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow                  ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn               ## CONSUMES
  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut              ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution  ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn          ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow             ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution    ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution      ## CONSUMES
