/** @file
|
*
|
* Copyright (c) 2011-2015, ARM Limited. All rights reserved.
|
*
|
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
*
|
**/
|
|
#include "BdsInternal.h"
|
|
/**
|
Connect all DXE drivers
|
|
@retval EFI_SUCCESS All drivers have been connected
|
@retval EFI_NOT_FOUND No handles match the search.
|
@retval EFI_OUT_OF_RESOURCES There is not resource pool memory to store the matching results.
|
|
**/
|
EFI_STATUS
|
BdsConnectAllDrivers (
|
VOID
|
)
|
{
|
UINTN HandleCount, Index;
|
EFI_HANDLE *HandleBuffer;
|
EFI_STATUS Status;
|
|
do {
|
// Locate all the driver handles
|
Status = gBS->LocateHandleBuffer (
|
AllHandles,
|
NULL,
|
NULL,
|
&HandleCount,
|
&HandleBuffer
|
);
|
if (EFI_ERROR (Status)) {
|
break;
|
}
|
|
// Connect every handles
|
for (Index = 0; Index < HandleCount; Index++) {
|
gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
|
}
|
|
if (HandleBuffer != NULL) {
|
FreePool (HandleBuffer);
|
}
|
|
// Check if new handles have been created after the start of the previous handles
|
Status = gDS->Dispatch ();
|
} while (!EFI_ERROR(Status));
|
|
return EFI_SUCCESS;
|
}
|