## @file
#  This driver produces UEFI PLATFORM_DRIVER_OVERRIDE_PROTOCOL if this protocol doesn't exist.
#  It doesn't install again if this protocol exists.
#  It only implements one interface GetDriver of PLATFORM_DRIVER_OVERRIDE_PROTOCOL protocol
#  and doesn't support other two interfaces GetDriverPath, DriverLoaded.
#
#  This driver also offers an UI interface in device manager to let user configure
#  platform override protocol to override the default algorithm for matching
#  drivers to controllers.
#
#  The main flow:
#  1. It dynamicly locate all controller device path.
#  2. It dynamicly locate all drivers which support binding protocol.
#  3. It export and dynamicly update two menu to let user select the
#     mapping between drivers to controllers.
#  4. It save all the mapping info in NV variables for the following boot,
#     which will be consumed by GetDriver API of the produced the platform override protocol.
#
# Caution: This module is a sample implementation for the test purpose.
#
# Copyright (c) 2007 - 2018, 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                      = PlatDriOverrideDxe
  MODULE_UNI_FILE                = PlatDriOverrideDxe.uni
  FILE_GUID                      = 35034CE2-A6E5-4fb4-BABE-A0156E9B2549
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = PlatDriOverrideDxeInit
  UNLOAD_IMAGE                   = PlatDriOverrideDxeUnload

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 EBC
#

[Sources]
  VfrStrings.uni
  Vfr.vfr
  PlatDriOverrideDxe.c
  PlatOverMngr.h
  PlatDriOverrideLib.c
  InternalPlatDriOverrideDxe.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  BaseLib
  DebugLib
  UefiLib
  UefiDriverEntryPoint
  UefiBootServicesTableLib
  HiiLib
  BaseMemoryLib
  MemoryAllocationLib
  DevicePathLib
  DxeServicesTableLib
  UefiRuntimeServicesTableLib
  PrintLib

[Guids]
  #
  # This GUID C Name is not required for build since it is from UefiLib and not directly used by this module source.
  #  gEfiGlobalVariableGuid                     ## SOMETIMES_CONSUMES   ## Variable:L"PlatformLang" # this variable specifies the platform supported language string (RFC 4646 format)
  #  gEfiGlobalVariableGuid                     ## SOMETIMES_CONSUMES   ## Variable:L"Lang" # this variable specifies the platform supported language string (ISO 639-2 format)
  #
  # There could be more than one variables, from PlatDriOver, PlatDriOver1, PlatDriOver2,...
  #  gEfiCallerIdGuid                           ## Private  ## Variable:L"PlatDriOver"
  #
  gEfiIfrTianoGuid                              ## SOMETIMES_PRODUCES   ## UNDEFINED
  ## SOMETIMES_CONSUMES ## GUID # HiiIsConfigHdrMatch Data
  ## SOMETIMES_PRODUCES ## GUID # HiiGetBrowserData Data
  ## SOMETIMES_CONSUMES ## GUID # HiiSetBrowserData Data
  ## SOMETIMES_PRODUCES ## GUID # HiiConstructConfigHdr Data
  ## CONSUMES           ## HII
  gPlatformOverridesManagerGuid

[Protocols]
  gEfiComponentName2ProtocolGuid                ## SOMETIMES_CONSUMES # Get Driver Name if ComponentName2Protocol exists
  gEfiComponentNameProtocolGuid                 ## SOMETIMES_CONSUMES # Get Driver Name if ComponentNameProtocol exists and ComponentName2Protocol doesn't exist
  gEfiFirmwareVolume2ProtocolGuid               ## SOMETIMES_CONSUMES # Get Driver Name from EFI UI section if ComponentName2Protocol and ComponentNameProtocol don't exist
  gEfiPciIoProtocolGuid                         ## SOMETIMES_CONSUMES # Find the PCI device if PciIo protocol is installed
  gEfiBusSpecificDriverOverrideProtocolGuid     ## SOMETIMES_CONSUMES # Check whether the PCI device contains one or more efi drivers in its option rom by this protocol

  gEfiDriverBindingProtocolGuid                 ## SOMETIMES_CONSUMES
  gEfiLoadedImageProtocolGuid                   ## SOMETIMES_CONSUMES
  gEfiLoadedImageDevicePathProtocolGuid         ## SOMETIMES_CONSUMES # Show the drivers in the second page that support DriverBindingProtocol, LoadedImageProtocol and LoadedImageDevicePathProtocol

  gEfiFormBrowser2ProtocolGuid                  ## CONSUMES
  gEfiHiiConfigRoutingProtocolGuid              ## CONSUMES
  gEfiHiiConfigAccessProtocolGuid               ## PRODUCES
  gEfiPlatformDriverOverrideProtocolGuid        ## PRODUCES
  ## PRODUCES
  ## SOMETIMES_CONSUMES # Show the controller device in the first page that support DevicePathProtocol
  gEfiDevicePathProtocolGuid

[Depex]
  gEfiFormBrowser2ProtocolGuid AND gEfiHiiConfigRoutingProtocolGuid

[UserExtensions.TianoCore."ExtraFiles"]
  PlatDriOverrideDxeExtra.uni
