Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   Platform Driver Override protocol as defined in the UEFI 2.1 specification.
      3 
      4   Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef __EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_H__
     16 #define __EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_H__
     17 
     18 ///
     19 /// Global ID for the Platform Driver Override Protocol
     20 ///
     21 #define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \
     22   { \
     23     0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
     24   }
     25 
     26 typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL  EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL;
     27 
     28 //
     29 // Prototypes for the Platform Driver Override Protocol
     30 //
     31 
     32 /**
     33   Retrieves the image handle of the platform override driver for a controller in the system.
     34 
     35   @param  This                  A pointer to the EFI_PLATFORM_DRIVER_OVERRIDE_
     36                                 PROTOCOL instance.
     37   @param  ControllerHandle      The device handle of the controller to check if a driver override
     38                                 exists.
     39   @param  DriverImageHandle     On input, a pointer to the previous driver image handle returned
     40                                 by GetDriver(). On output, a pointer to the next driver
     41                                 image handle.
     42 
     43   @retval EFI_SUCCESS           The driver override for ControllerHandle was returned in
     44                                 DriverImageHandle.
     45   @retval EFI_NOT_FOUND         A driver override for ControllerHandle was not found.
     46   @retval EFI_INVALID_PARAMETER The handle specified by ControllerHandle is NULL.
     47   @retval EFI_INVALID_PARAMETER DriverImageHandle is not a handle that was returned on a
     48                                 previous call to GetDriver().
     49 
     50 **/
     51 typedef
     52 EFI_STATUS
     53 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER)(
     54   IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL              *This,
     55   IN     EFI_HANDLE                                     ControllerHandle,
     56   IN OUT EFI_HANDLE                                     *DriverImageHandle
     57   );
     58 
     59 /**
     60   Retrieves the device path of the platform override driver for a controller in the system.
     61 
     62   @param  This                  A pointer to the EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL instance.
     63   @param  ControllerHandle      The device handle of the controller to check if a driver override
     64                                 exists.
     65   @param  DriverImagePath       On input, a pointer to the previous driver device path returned by
     66                                 GetDriverPath(). On output, a pointer to the next driver
     67                                 device path. Passing in a pointer to NULL will return the first
     68                                 driver device path for ControllerHandle.
     69 
     70   @retval EFI_SUCCESS           The driver override for ControllerHandle was returned in
     71                                 DriverImageHandle.
     72   @retval EFI_UNSUPPORTED       The operation is not supported.
     73   @retval EFI_NOT_FOUND         A driver override for ControllerHandle was not found.
     74   @retval EFI_INVALID_PARAMETER The handle specified by ControllerHandle is NULL.
     75   @retval EFI_INVALID_PARAMETER DriverImagePath is not a device path that was returned on a
     76                                 previous call to GetDriverPath().
     77 
     78 **/
     79 typedef
     80 EFI_STATUS
     81 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH)(
     82   IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL              *This,
     83   IN     EFI_HANDLE                                     ControllerHandle,
     84   IN OUT EFI_DEVICE_PATH_PROTOCOL                       **DriverImagePath
     85   );
     86 
     87 /**
     88   Used to associate a driver image handle with a device path that was returned on a prior call to the
     89   GetDriverPath() service. This driver image handle will then be available through the
     90   GetDriver() service.
     91 
     92   @param  This                  A pointer to the EFI_PLATFORM_DRIVER_OVERRIDE_
     93                                 PROTOCOL instance.
     94   @param  ControllerHandle      The device handle of the controller.
     95   @param  DriverImagePath       A pointer to the driver device path that was returned in a prior
     96                                 call to GetDriverPath().
     97   @param  DriverImageHandle     The driver image handle that was returned by LoadImage()
     98                                 when the driver specified by DriverImagePath was loaded
     99                                 into memory.
    100 
    101   @retval EFI_SUCCESS           The association between DriverImagePath and
    102                                 DriverImageHandle was established for the controller specified
    103                                 by ControllerHandle.
    104   @retval EFI_UNSUPPORTED       The operation is not supported.
    105   @retval EFI_NOT_FOUND         DriverImagePath is not a device path that was returned on a prior
    106                                 call to GetDriverPath() for the controller specified by
    107                                 ControllerHandle.
    108   @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
    109   @retval EFI_INVALID_PARAMETER DriverImagePath is not a valid device path.
    110   @retval EFI_INVALID_PARAMETER DriverImageHandle is not a valid image handle.
    111 
    112 **/
    113 typedef
    114 EFI_STATUS
    115 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED)(
    116   IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL          *This,
    117   IN EFI_HANDLE                                     ControllerHandle,
    118   IN EFI_DEVICE_PATH_PROTOCOL                       *DriverImagePath,
    119   IN EFI_HANDLE                                     DriverImageHandle
    120   );
    121 
    122 ///
    123 /// This protocol matches one or more drivers to a controller. A platform driver
    124 /// produces this protocol, and it is installed on a separate handle. This protocol
    125 /// is used by the ConnectController() boot service to select the best driver
    126 /// for a controller. All of the drivers returned by this protocol have a higher
    127 /// precedence than drivers found from an EFI Bus Specific Driver Override Protocol
    128 /// or drivers found from the general UEFI driver Binding search algorithm. If more
    129 /// than one driver is returned by this protocol, then the drivers are returned in
    130 /// order from highest precedence to lowest precedence.
    131 ///
    132 struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL {
    133   EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER       GetDriver;
    134   EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH  GetDriverPath;
    135   EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED    DriverLoaded;
    136 };
    137 
    138 extern EFI_GUID gEfiPlatformDriverOverrideProtocolGuid;
    139 
    140 #endif
    141