## @file
# The DXE driver produces HII protocols defined in UEFI specification.
#
# This driver produces all required HII serivces that includes HiiDataBase, HiiString,
# HiiFont, HiiConfigRouting. To support UEFI HII, this driver is required.
#
# Copyright (c) 2007 - 2016, 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                      = HiiDatabase
  MODULE_UNI_FILE                = HiiDatabase.uni
  FILE_GUID                      = 348C4D62-BFBD-4882-9ECE-C80BB1C4783B
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = InitializeHiiDatabase

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  HiiDatabaseEntry.c
  Image.c
  ImageEx.c
  HiiDatabase.h
  ConfigRouting.c
  String.c
  Database.c
  Font.c
  ConfigKeywordHandler.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec


[LibraryClasses]
  MemoryAllocationLib
  DevicePathLib
  BaseLib
  UefiBootServicesTableLib
  UefiDriverEntryPoint
  BaseMemoryLib
  DebugLib
  UefiLib
  PcdLib
  UefiRuntimeServicesTableLib
  PrintLib

[Protocols]
  gEfiDevicePathProtocolGuid                                            ## SOMETIMES_CONSUMES
  gEfiHiiStringProtocolGuid                                             ## PRODUCES
  gEfiHiiImageProtocolGuid        |gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol  ## SOMETIMES_PRODUCES
  gEfiHiiImageExProtocolGuid      |gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol  ## SOMETIMES_PRODUCES
  gEfiHiiImageDecoderProtocolGuid |gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol  ## SOMETIMES_CONSUMES
  gEfiHiiConfigRoutingProtocolGuid                                      ## PRODUCES
  gEfiHiiDatabaseProtocolGuid                                           ## PRODUCES
  gEfiHiiFontProtocolGuid                                               ## PRODUCES
  gEfiHiiConfigAccessProtocolGuid                                       ## SOMETIMES_CONSUMES
  gEfiConfigKeywordHandlerProtocolGuid                                  ## PRODUCES

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol   ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdHiiOsRuntimeSupport       ## CONSUMES

[Pcd]
  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang ## CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdNvStoreDefaultValueBuffer ## CONSUMES

[Guids]  
  #
  # Event registered to EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group,
  # which will be triggered by EFI_HII_DATABASE_PROTOCOL.SetKeyboardLayout().
  #
  ## CONSUMES  ## Event
  ## PRODUCES  ## Event
  gEfiHiiKeyBoardLayoutGuid
  gEfiHiiImageDecoderNameJpegGuid |gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol  ## SOMETIMES_CONSUMES ## GUID
  gEfiHiiImageDecoderNamePngGuid  |gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol  ## SOMETIMES_CONSUMES ## GUID
  gEfiIfrBitvarstoreGuid  ## SOMETIMES_CONSUMES  ## GUID

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  HiiDatabaseExtra.uni
