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