## @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 - 2014, 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
  HiiDatabase.h
  ConfigRouting.c
  String.c
  Database.c
  Font.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
  gEfiHiiConfigRoutingProtocolGuid                                      ## PRODUCES
  gEfiHiiDatabaseProtocolGuid                                           ## PRODUCES
  gEfiHiiFontProtocolGuid                                               ## PRODUCES
  gEfiHiiConfigAccessProtocolGuid                                       ## SOMETIMES_CONSUMES

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdSupportHiiImageProtocol   ## CONSUMES

[Pcd]
  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang ## 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

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  HiiDatabaseExtra.uni
