\r
**/\r
\r
-#include <DxeMain.h>\r
+#include "DxeMain.h"\r
+#include "Handle.h"\r
\r
\r
//\r
/**\r
Connects one or more drivers to a controller.\r
\r
- @param ControllerHandle Handle of the controller to be \r
- connected. \r
- @param DriverImageHandle DriverImageHandle A pointer to an \r
- ordered list of driver image \r
- handles. \r
- @param RemainingDevicePath RemainingDevicePath A pointer to \r
- the device path that specifies a \r
- child of the controller specified \r
- by ControllerHandle. \r
- @param Recursive Whether the function would be \r
- called recursively or not. \r
+ @param ControllerHandle Handle of the controller to be\r
+ connected.\r
+ @param DriverImageHandle DriverImageHandle A pointer to an\r
+ ordered list of driver image\r
+ handles.\r
+ @param RemainingDevicePath RemainingDevicePath A pointer to\r
+ the device path that specifies a\r
+ child of the controller specified\r
+ by ControllerHandle.\r
+ @param Recursive Whether the function would be\r
+ called recursively or not.\r
\r
@return Status code.\r
\r
**/\r
-EFI_STATUS \r
+EFI_STATUS\r
EFIAPI\r
CoreConnectController (\r
IN EFI_HANDLE ControllerHandle,\r
EFI_HANDLE *ChildHandleBuffer;\r
UINTN ChildHandleCount;\r
UINTN Index;\r
- \r
+\r
//\r
// Make sure ControllerHandle is valid\r
//\r
//\r
AlignedRemainingDevicePath = NULL;\r
if (RemainingDevicePath != NULL) {\r
- AlignedRemainingDevicePath = CoreDuplicateDevicePath (RemainingDevicePath);\r
+ AlignedRemainingDevicePath = DuplicateDevicePath (RemainingDevicePath);\r
+\r
+ if (AlignedRemainingDevicePath == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
}\r
\r
//\r
//\r
for (Link = Handle->Protocols.ForwardLink, ChildHandleCount = 0; Link != &Handle->Protocols; Link = Link->ForwardLink) {\r
Prot = CR(Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);\r
- for (ProtLink = Prot->OpenList.ForwardLink; \r
- ProtLink != &Prot->OpenList; \r
+ for (ProtLink = Prot->OpenList.ForwardLink;\r
+ ProtLink != &Prot->OpenList;\r
ProtLink = ProtLink->ForwardLink) {\r
OpenData = CR (ProtLink, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
//\r
// Allocate a handle buffer for ControllerHandle's children\r
//\r
- ChildHandleBuffer = CoreAllocateBootServicesPool (ChildHandleCount * sizeof(EFI_HANDLE));\r
+ ChildHandleBuffer = AllocatePool (ChildHandleCount * sizeof(EFI_HANDLE));\r
+ if (ChildHandleBuffer == NULL) {\r
+ CoreReleaseProtocolLock ();\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
\r
//\r
// Fill in a handle buffer with ControllerHandle's children\r
//\r
for (Link = Handle->Protocols.ForwardLink, ChildHandleCount = 0; Link != &Handle->Protocols; Link = Link->ForwardLink) {\r
Prot = CR(Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);\r
- for (ProtLink = Prot->OpenList.ForwardLink; \r
- ProtLink != &Prot->OpenList; \r
+ for (ProtLink = Prot->OpenList.ForwardLink;\r
+ ProtLink != &Prot->OpenList;\r
ProtLink = ProtLink->ForwardLink) {\r
OpenData = CR (ProtLink, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
NULL,\r
NULL,\r
TRUE\r
- ); \r
+ );\r
}\r
\r
//\r
Add Driver Binding Protocols from Context Driver Image Handles to sorted\r
Driver Binding Protocol list.\r
\r
- @param DriverBindingHandle Handle of the driver binding \r
- protocol. \r
- @param NumberOfSortedDriverBindingProtocols Number Of sorted driver binding \r
- protocols \r
- @param SortedDriverBindingProtocols The sorted protocol list. \r
- @param DriverBindingHandleCount Driver Binding Handle Count. \r
- @param DriverBindingHandleBuffer The buffer of driver binding \r
- protocol to be modified. \r
- @param IsImageHandle Indicate whether \r
- DriverBindingHandle is an image \r
- handle \r
+ @param DriverBindingHandle Handle of the driver binding\r
+ protocol.\r
+ @param NumberOfSortedDriverBindingProtocols Number Of sorted driver binding\r
+ protocols\r
+ @param SortedDriverBindingProtocols The sorted protocol list.\r
+ @param DriverBindingHandleCount Driver Binding Handle Count.\r
+ @param DriverBindingHandleBuffer The buffer of driver binding\r
+ protocol to be modified.\r
+ @param IsImageHandle Indicate whether\r
+ DriverBindingHandle is an image\r
+ handle\r
\r
@return None.\r
\r
VOID\r
AddSortedDriverBindingProtocol (\r
IN EFI_HANDLE DriverBindingHandle,\r
- IN OUT UINTN *NumberOfSortedDriverBindingProtocols, \r
+ IN OUT UINTN *NumberOfSortedDriverBindingProtocols,\r
IN OUT EFI_DRIVER_BINDING_PROTOCOL **SortedDriverBindingProtocols,\r
IN UINTN DriverBindingHandleCount,\r
IN OUT EFI_HANDLE *DriverBindingHandleBuffer,\r
if (DriverBinding->ImageHandle == DriverBindingHandle) {\r
AddSortedDriverBindingProtocol (\r
DriverBindingHandleBuffer[Index],\r
- NumberOfSortedDriverBindingProtocols, \r
+ NumberOfSortedDriverBindingProtocols,\r
SortedDriverBindingProtocols,\r
DriverBindingHandleCount,\r
DriverBindingHandleBuffer,\r
}\r
}\r
}\r
- \r
+\r
\r
/**\r
Connects a controller to a driver.\r
\r
- @param ControllerHandle Handle of the controller to be \r
- connected. \r
- @param ContextDriverImageHandles DriverImageHandle A pointer to an \r
- ordered list of driver image \r
- handles. \r
- @param RemainingDevicePath RemainingDevicePath A pointer to \r
- the device path that specifies a \r
- child of the controller \r
- specified by ControllerHandle. \r
-\r
- @retval EFI_SUCCESS One or more drivers were \r
- connected to ControllerHandle. \r
- @retval EFI_OUT_OF_RESOURCES No enough system resources to \r
- complete the request. \r
- @retval EFI_NOT_FOUND No drivers were connected to \r
+ @param ControllerHandle Handle of the controller to be\r
+ connected.\r
+ @param ContextDriverImageHandles DriverImageHandle A pointer to an\r
+ ordered list of driver image\r
+ handles.\r
+ @param RemainingDevicePath RemainingDevicePath A pointer to\r
+ the device path that specifies a\r
+ child of the controller\r
+ specified by ControllerHandle.\r
+\r
+ @retval EFI_SUCCESS One or more drivers were\r
+ connected to ControllerHandle.\r
+ @retval EFI_OUT_OF_RESOURCES No enough system resources to\r
+ complete the request.\r
+ @retval EFI_NOT_FOUND No drivers were connected to\r
ControllerHandle.\r
\r
**/\r
-EFI_STATUS \r
+EFI_STATUS\r
CoreConnectSingleController (\r
IN EFI_HANDLE ControllerHandle,\r
IN EFI_HANDLE *ContextDriverImageHandles OPTIONAL,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL \r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
)\r
{\r
EFI_STATUS Status;\r
// Get list of all Driver Binding Protocol Instances\r
//\r
Status = CoreLocateHandleBuffer (\r
- ByProtocol, \r
- &gEfiDriverBindingProtocolGuid, \r
+ ByProtocol,\r
+ &gEfiDriverBindingProtocolGuid,\r
NULL,\r
- &DriverBindingHandleCount, \r
+ &DriverBindingHandleCount,\r
&DriverBindingHandleBuffer\r
);\r
if (EFI_ERROR (Status) || (DriverBindingHandleCount == 0)) {\r
//\r
// Allocate a duplicate array for the sorted Driver Binding Protocol Instances\r
//\r
- SortedDriverBindingProtocols = CoreAllocateBootServicesPool (sizeof (VOID *) * DriverBindingHandleCount);\r
+ SortedDriverBindingProtocols = AllocatePool (sizeof (VOID *) * DriverBindingHandleCount);\r
if (SortedDriverBindingProtocols == NULL) {\r
CoreFreePool (DriverBindingHandleBuffer);\r
return EFI_OUT_OF_RESOURCES;\r
for (Index = 0; ContextDriverImageHandles[Index] != NULL; Index++) {\r
AddSortedDriverBindingProtocol (\r
ContextDriverImageHandles[Index],\r
- &NumberOfSortedDriverBindingProtocols, \r
+ &NumberOfSortedDriverBindingProtocols,\r
SortedDriverBindingProtocols,\r
DriverBindingHandleCount,\r
DriverBindingHandleBuffer,\r
// Add the Platform Driver Override Protocol drivers for ControllerHandle next\r
//\r
Status = CoreLocateProtocol (\r
- &gEfiPlatformDriverOverrideProtocolGuid, \r
- NULL, \r
+ &gEfiPlatformDriverOverrideProtocolGuid,\r
+ NULL,\r
(VOID **) &PlatformDriverOverride\r
);\r
if (!EFI_ERROR (Status) && (PlatformDriverOverride != NULL)) {\r
if (!EFI_ERROR (Status)) {\r
AddSortedDriverBindingProtocol (\r
DriverImageHandle,\r
- &NumberOfSortedDriverBindingProtocols, \r
+ &NumberOfSortedDriverBindingProtocols,\r
SortedDriverBindingProtocols,\r
DriverBindingHandleCount,\r
DriverBindingHandleBuffer,\r
// Get the Bus Specific Driver Override Protocol instance on the Controller Handle\r
//\r
Status = CoreHandleProtocol (\r
- ControllerHandle, \r
- &gEfiBusSpecificDriverOverrideProtocolGuid, \r
+ ControllerHandle,\r
+ &gEfiBusSpecificDriverOverrideProtocolGuid,\r
(VOID **) &BusSpecificDriverOverride\r
);\r
if (!EFI_ERROR (Status) && (BusSpecificDriverOverride != NULL)) {\r
if (!EFI_ERROR (Status)) {\r
AddSortedDriverBindingProtocol (\r
DriverImageHandle,\r
- &NumberOfSortedDriverBindingProtocols, \r
+ &NumberOfSortedDriverBindingProtocols,\r
SortedDriverBindingProtocols,\r
DriverBindingHandleCount,\r
DriverBindingHandleBuffer,\r
for (Index = 0; Index < DriverBindingHandleCount; Index++) {\r
AddSortedDriverBindingProtocol (\r
DriverBindingHandleBuffer[Index],\r
- &NumberOfSortedDriverBindingProtocols, \r
+ &NumberOfSortedDriverBindingProtocols,\r
SortedDriverBindingProtocols,\r
DriverBindingHandleCount,\r
DriverBindingHandleBuffer,\r
// EFI_NOT_READY, so it will be restarted\r
//\r
Status = CoreLocateHandleBuffer (\r
- ByProtocol, \r
- &gEfiDriverBindingProtocolGuid, \r
+ ByProtocol,\r
+ &gEfiDriverBindingProtocolGuid,\r
NULL,\r
- &NewDriverBindingHandleCount, \r
+ &NewDriverBindingHandleCount,\r
&NewDriverBindingHandleBuffer\r
);\r
CoreFreePool (NewDriverBindingHandleBuffer);\r
\r
//\r
// Loop through the sorted Driver Binding Protocol Instances in order, and see if\r
- // any of the Driver Binding Protocols support the controller specified by \r
+ // any of the Driver Binding Protocols support the controller specified by\r
// ControllerHandle.\r
//\r
DriverBinding = NULL;\r
if (SortedDriverBindingProtocols[Index] != NULL) {\r
DriverBinding = SortedDriverBindingProtocols[Index];\r
Status = DriverBinding->Supported(\r
- DriverBinding, \r
+ DriverBinding,\r
ControllerHandle,\r
RemainingDevicePath\r
);\r
//\r
PERF_START (DriverBinding->DriverBindingHandle, DRIVERBINDING_START_TOK, NULL, 0);\r
Status = DriverBinding->Start (\r
- DriverBinding, \r
+ DriverBinding,\r
ControllerHandle,\r
RemainingDevicePath\r
);\r
//\r
if (OneStarted) {\r
return EFI_SUCCESS;\r
- } \r
+ }\r
\r
//\r
// If no drivers started and RemainingDevicePath is an End Device Path Node, then return EFI_SUCCESS\r
if (IsDevicePathEnd (RemainingDevicePath)) {\r
return EFI_SUCCESS;\r
}\r
- } \r
+ }\r
\r
//\r
// Otherwise, no drivers were started on ControllerHandle, so return EFI_NOT_FOUND\r
/**\r
Disonnects a controller from a driver\r
\r
- @param ControllerHandle ControllerHandle The handle of \r
- the controller from which \r
- driver(s) are to be \r
- disconnected. \r
- @param DriverImageHandle DriverImageHandle The driver to \r
- disconnect from ControllerHandle. \r
- @param ChildHandle ChildHandle The handle of the \r
- child to destroy. \r
-\r
- @retval EFI_SUCCESS One or more drivers were \r
- disconnected from the controller. \r
- @retval EFI_SUCCESS On entry, no drivers are managing \r
- ControllerHandle. \r
- @retval EFI_SUCCESS DriverImageHandle is not NULL, \r
- and on entry DriverImageHandle is \r
- not managing ControllerHandle. \r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid \r
- EFI_HANDLE. \r
- @retval EFI_INVALID_PARAMETER DriverImageHandle is not NULL, \r
- and it is not a valid EFI_HANDLE. \r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL, and it \r
- is not a valid EFI_HANDLE. \r
- @retval EFI_OUT_OF_RESOURCES There are not enough resources \r
- available to disconnect any \r
- drivers from ControllerHandle. \r
- @retval EFI_DEVICE_ERROR The controller could not be \r
- disconnected because of a device \r
+ @param ControllerHandle ControllerHandle The handle of\r
+ the controller from which\r
+ driver(s) are to be\r
+ disconnected.\r
+ @param DriverImageHandle DriverImageHandle The driver to\r
+ disconnect from ControllerHandle.\r
+ @param ChildHandle ChildHandle The handle of the\r
+ child to destroy.\r
+\r
+ @retval EFI_SUCCESS One or more drivers were\r
+ disconnected from the controller.\r
+ @retval EFI_SUCCESS On entry, no drivers are managing\r
+ ControllerHandle.\r
+ @retval EFI_SUCCESS DriverImageHandle is not NULL,\r
+ and on entry DriverImageHandle is\r
+ not managing ControllerHandle.\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid\r
+ EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER DriverImageHandle is not NULL,\r
+ and it is not a valid EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL, and it\r
+ is not a valid EFI_HANDLE.\r
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources\r
+ available to disconnect any\r
+ drivers from ControllerHandle.\r
+ @retval EFI_DEVICE_ERROR The controller could not be\r
+ disconnected because of a device\r
error.\r
\r
**/\r
-EFI_STATUS \r
+EFI_STATUS\r
EFIAPI\r
CoreDisconnectController (\r
IN EFI_HANDLE ControllerHandle,\r
// Get list of drivers that are currently managing ControllerHandle\r
//\r
DriverImageHandleBuffer = NULL;\r
- DriverImageHandleCount = 1; \r
- \r
+ DriverImageHandleCount = 1;\r
+\r
if (DriverImageHandle == NULL) {\r
//\r
// Look at each protocol interface for a match\r
CoreAcquireProtocolLock ();\r
for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {\r
Prot = CR(Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);\r
- for (ProtLink = Prot->OpenList.ForwardLink; \r
- ProtLink != &Prot->OpenList; \r
+ for (ProtLink = Prot->OpenList.ForwardLink;\r
+ ProtLink != &Prot->OpenList;\r
ProtLink = ProtLink->ForwardLink) {\r
OpenData = CR (ProtLink, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
}\r
}\r
CoreReleaseProtocolLock ();\r
- \r
+\r
//\r
// If there are no drivers managing this controller, then return EFI_SUCCESS\r
//\r
goto Done;\r
}\r
\r
- DriverImageHandleBuffer = CoreAllocateBootServicesPool (sizeof (EFI_HANDLE) * DriverImageHandleCount);\r
+ DriverImageHandleBuffer = AllocatePool (sizeof (EFI_HANDLE) * DriverImageHandleCount);\r
if (DriverImageHandleBuffer == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Done;\r
CoreAcquireProtocolLock ();\r
for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {\r
Prot = CR(Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);\r
- for (ProtLink = Prot->OpenList.ForwardLink; \r
- ProtLink != &Prot->OpenList; \r
+ for (ProtLink = Prot->OpenList.ForwardLink;\r
+ ProtLink != &Prot->OpenList;\r
ProtLink = ProtLink->ForwardLink) {\r
OpenData = CR (ProtLink, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
// Get the Driver Binding Protocol of the driver that is managing this controller\r
//\r
Status = CoreHandleProtocol (\r
- DriverImageHandle, \r
- &gEfiDriverBindingProtocolGuid, \r
+ DriverImageHandle,\r
+ &gEfiDriverBindingProtocolGuid,\r
(VOID **)&DriverBinding\r
);\r
if (EFI_ERROR (Status)) {\r
CoreAcquireProtocolLock ();\r
for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {\r
Prot = CR(Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);\r
- for (ProtLink = Prot->OpenList.ForwardLink; \r
- ProtLink != &Prot->OpenList; \r
+ for (ProtLink = Prot->OpenList.ForwardLink;\r
+ ProtLink != &Prot->OpenList;\r
ProtLink = ProtLink->ForwardLink) {\r
OpenData = CR (ProtLink, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
if (OpenData->AgentHandle == DriverImageHandle) {\r
if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
ChildBufferCount++;\r
- } \r
+ }\r
if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
DriverImageHandleValid = TRUE;\r
}\r
ChildHandleValid = FALSE;\r
ChildBuffer = NULL;\r
if (ChildBufferCount != 0) {\r
- ChildBuffer = CoreAllocateBootServicesPool (sizeof (EFI_HANDLE) * ChildBufferCount);\r
+ ChildBuffer = AllocatePool (sizeof (EFI_HANDLE) * ChildBufferCount);\r
if (ChildBuffer == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Done;\r
CoreAcquireProtocolLock ();\r
for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {\r
Prot = CR(Link, PROTOCOL_INTERFACE, Link, PROTOCOL_INTERFACE_SIGNATURE);\r
- for (ProtLink = Prot->OpenList.ForwardLink; \r
- ProtLink != &Prot->OpenList; \r
+ for (ProtLink = Prot->OpenList.ForwardLink;\r
+ ProtLink != &Prot->OpenList;\r
ProtLink = ProtLink->ForwardLink) {\r
OpenData = CR (ProtLink, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
if ((OpenData->AgentHandle == DriverImageHandle) &&\r
} else {\r
Status = EFI_NOT_FOUND;\r
}\r
- \r
-Done: \r
+\r
+Done:\r
\r
if (DriverImageHandleBuffer != NULL) {\r
CoreFreePool (DriverImageHandleBuffer);\r