35 IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
36 IN EFI_HANDLE ControllerHandle,
37 IN OUT EFI_HANDLE *DriverImageHandle
40 EFI_HANDLE *HandlePtr;
43 if (ControllerHandle == NULL) {
44 return EFI_INVALID_PARAMETER;
61 if (*DriverImageHandle == NULL) {
68 return EFI_INVALID_PARAMETER;
74 if (*DriverImageHandle == NULL) {
89 if (HandlePtr[0] == *DriverImageHandle) {
90 *DriverImageHandle = HandlePtr[1];
94 if (*DriverImageHandle != NULL) {
114 return EFI_NOT_FOUND;
120 return EFI_INVALID_PARAMETER;
148 IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
149 IN EFI_HANDLE ControllerHandle,
150 IN EFI_DEVICE_PATH_PROTOCOL *DriverImagePath,
151 IN EFI_HANDLE DriverImageHandle
154 return EFI_UNSUPPORTED;
167 IN EFI_HANDLE *PriorityDrivers
170 EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *PlatformDriverOverride;
172 EFI_HANDLE NewHandle;
174 ASSERT (PriorityDrivers != NULL);
177 Status =
gBS->LocateProtocol (
178 &gEfiPlatformDriverOverrideProtocolGuid,
180 (VOID **)&PlatformDriverOverride
183 if (!EFI_ERROR (Status)) {
190 return gBS->InstallMultipleProtocolInterfaces (
192 &gEfiPlatformDriverOverrideProtocolGuid,
205 EFI_HANDLE *HandleBuffer;
210 EFI_GUID **ProtocolGuids;
212 EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *ProtocolInfos;
213 UINTN ProtocolInfoCount;
220 Status =
gBS->LocateHandleBuffer (
228 if (EFI_ERROR (Status)) {
232 for (DeviceIndex = 0; DeviceIndex < HandleCount; ++DeviceIndex) {
239 for (HandleIndex = 0; HandleIndex < HandleCount && Connect; ++HandleIndex) {
243 Status =
gBS->ProtocolsPerHandle (
244 HandleBuffer[HandleIndex],
249 if (EFI_ERROR (Status)) {
253 for (ProtocolIndex = 0; ProtocolIndex < ProtocolCount && Connect; ++ProtocolIndex) {
257 Status =
gBS->OpenProtocolInformation (
258 HandleBuffer[HandleIndex],
259 ProtocolGuids[ProtocolIndex],
264 if (!EFI_ERROR (Status)) {
265 for (InfoIndex = 0; InfoIndex < ProtocolInfoCount && Connect; ++InfoIndex) {
266 if ( (ProtocolInfos[InfoIndex].ControllerHandle == HandleBuffer[DeviceIndex])
267 && ((ProtocolInfos[InfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) == EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER))
273 FreePool (ProtocolInfos);
277 FreePool (ProtocolGuids);
284 gBS->ConnectController (HandleBuffer[DeviceIndex], NULL, NULL, TRUE);
288 FreePool (HandleBuffer);