4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Platform Driver Override protocol as defined in the UEFI 2.1 specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Global ID for the Platform Driver Override Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Prototypes for the Platform Driver Override Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves the image handle of the platform override driver for a controller in the system.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_PLATFORM_DRIVER_OVERRIDE_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle The device handle of the controller to check if a driver override
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync exists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverImageHandle On input, a pointer to the previous driver image handle returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by GetDriver(). On output, a pointer to the next driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync image handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The driver override for ControllerHandle was returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND A driver override for ControllerHandle was not found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The handle specified by ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverImageHandle is not a handle that was returned on a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync previous call to GetDriver().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_HANDLE *DriverImageHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves the device path of the platform override driver for a controller in the system.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle The device handle of the controller to check if a driver override
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync exists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverImagePath On input, a pointer to the previous driver device path returned by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GetDriverPath(). On output, a pointer to the next driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device path. Passing in a pointer to NULL will return the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver device path for ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The driver override for ControllerHandle was returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The operation is not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND A driver override for ControllerHandle was not found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The handle specified by ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverImagePath is not a device path that was returned on a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync previous call to GetDriverPath().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_DEVICE_PATH_PROTOCOL **DriverImagePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to associate a driver image handle with a device path that was returned on a prior call to the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GetDriverPath() service. This driver image handle will then be available through the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GetDriver() service.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_PLATFORM_DRIVER_OVERRIDE_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle The device handle of the controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverImagePath A pointer to the driver device path that was returned in a prior
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync call to GetDriverPath().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverImageHandle The driver image handle that was returned by LoadImage()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync when the driver specified by DriverImagePath was loaded
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync into memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The association between DriverImagePath and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandle was established for the controller specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The operation is not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND DriverImagePath is not a device path that was returned on a prior
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync call to GetDriverPath() for the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverImagePath is not a valid device path.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverImageHandle is not a valid image handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *DriverImagePath,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE DriverImageHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// This protocol matches one or more drivers to a controller. A platform driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// produces this protocol, and it is installed on a separate handle. This protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// is used by the ConnectController() boot service to select the best driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// for a controller. All of the drivers returned by this protocol have a higher
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// precedence than drivers found from an EFI Bus Specific Driver Override Protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// or drivers found from the general UEFI driver Binding search algorithm. If more
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// than one driver is returned by this protocol, then the drivers are returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// order from highest precedence to lowest precedence.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiPlatformDriverOverrideProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif