// /** @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 dynamically locate all controller device path.
// 2. It dynamically locate all drivers which support binding protocol.
// 3. It export and dynamically 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>
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// **/


#string STR_MODULE_ABSTRACT             #language en-US "Produces UEFI PLATFORM_DRIVER_OVERRIDE_PROTOCOL if this protocol doesn't exist"

#string STR_MODULE_DESCRIPTION          #language en-US "This driver produces UEFI PLATFORM_DRIVER_OVERRIDE_PROTOCOL if this protocol doesn't exist. It only implements the GetDriver() interface of PLATFORM_DRIVER_OVERRIDE_PROTOCOL protocol This driver also offers an UI interface in device manager to let users configure PlatformOverrideProtocol to override the default algorithm for matching drivers to controllers.<BR><BR>\n"
                                                        "The main flow:<BR>\n"
                                                        "1. It dynamically locates all controller device path.<BR>\n"
                                                        "2. It dynamically locates all drivers which support binding protocol.<BR>\n"
                                                        "3. It exports and dynamically updates two menu to let user select the  mapping between drivers to controllers.<BR>\n"
                                                        "4. It saves 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.<BR>"

