/** @file\r
UEFI handle & protocol handling.\r
\r
-Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
**/\r
\r
#include "DxeMain.h"\r
+#include "Handle.h"\r
\r
\r
//\r
// gHandleDatabaseKey - The Key to show that the handle has been created/modified\r
//\r
LIST_ENTRY mProtocolDatabase = INITIALIZE_LIST_HEAD_VARIABLE (mProtocolDatabase);\r
-LIST_ENTRY gHandleList = INITIALIZE_LIST_HEAD_VARIABLE (gHandleList);\r
-EFI_LOCK gProtocolDatabaseLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_NOTIFY);\r
-UINT64 gHandleDatabaseKey = 0;\r
+LIST_ENTRY gHandleList = INITIALIZE_LIST_HEAD_VARIABLE (gHandleList);\r
+EFI_LOCK gProtocolDatabaseLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_NOTIFY);\r
+UINT64 gHandleDatabaseKey = 0;\r
\r
\r
\r
//\r
// Print debug message\r
//\r
- DEBUG((DEBUG_LOAD | DEBUG_INFO, "InstallProtocolInterface: %g %p\n", Protocol, Interface));\r
+ DEBUG((DEBUG_INFO, "InstallProtocolInterface: %g %p\n", Protocol, Interface));\r
\r
Status = EFI_OUT_OF_RESOURCES;\r
Prot = NULL;\r
//\r
Status = CoreInstallProtocolInterface (Handle, Protocol, EFI_NATIVE_INTERFACE, Interface);\r
}\r
+ VA_END (Args);\r
\r
//\r
// If there was an error, remove all the interfaces that were installed without any errors\r
Interface = VA_ARG (Args, VOID *);\r
CoreUninstallProtocolInterface (*Handle, Protocol, Interface);\r
}\r
+ VA_END (Args);\r
+ \r
*Handle = OldHandle;\r
}\r
\r
(Link != &Prot->OpenList) && !ItemFound;\r
Link = Link->ForwardLink ) {\r
OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
- if (OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) {\r
+ if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
ItemFound = TRUE;\r
CoreReleaseProtocolLock ();\r
Status = CoreDisconnectController (UserHandle, OpenData->AgentHandle, NULL);\r
(Link != &Prot->OpenList) && !ItemFound;\r
Link = Link->ForwardLink ) {\r
OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
- if (OpenData->Attributes &\r
- (EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL | EFI_OPEN_PROTOCOL_GET_PROTOCOL | EFI_OPEN_PROTOCOL_TEST_PROTOCOL)) {\r
+ if ((OpenData->Attributes &\r
+ (EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL | EFI_OPEN_PROTOCOL_GET_PROTOCOL | EFI_OPEN_PROTOCOL_TEST_PROTOCOL)) != 0) {\r
ItemFound = TRUE;\r
RemoveEntryList (&OpenData->Link);\r
Prot->OpenListCount--;\r
//\r
Status = CoreUninstallProtocolInterface (Handle, Protocol, Interface);\r
}\r
+ VA_END (Args);\r
\r
//\r
// If there was an error, add all the interfaces that were\r
Interface = VA_ARG(Args, VOID *);\r
CoreInstallProtocolInterface (&Handle, Protocol, EFI_NATIVE_INTERFACE, Interface);\r
}\r
+ VA_END (Args);\r
}\r
\r
return Status;\r
@param Interface Supplies the address where a pointer to the\r
corresponding Protocol Interface is returned.\r
\r
- @return The requested protocol interface for the handle\r
+ @retval EFI_SUCCESS The interface information for the specified protocol was returned.\r
+ @retval EFI_UNSUPPORTED The device does not support the specified protocol.\r
+ @retval EFI_INVALID_PARAMETER Handle is not a valid EFI_HANDLE..\r
+ @retval EFI_INVALID_PARAMETER Protocol is NULL.\r
+ @retval EFI_INVALID_PARAMETER Interface is NULL.\r
\r
**/\r
EFI_STATUS\r
ExactMatch = (BOOLEAN)((OpenData->AgentHandle == ImageHandle) &&\r
(OpenData->Attributes == Attributes) &&\r
(OpenData->ControllerHandle == ControllerHandle));\r
- if (OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) {\r
+ if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
ByDriver = TRUE;\r
if (ExactMatch) {\r
Status = EFI_ALREADY_STARTED;\r
goto Done;\r
}\r
}\r
- if (OpenData->Attributes & EFI_OPEN_PROTOCOL_EXCLUSIVE) {\r
+ if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_EXCLUSIVE) != 0) {\r
Exclusive = TRUE;\r
} else if (ExactMatch) {\r
OpenData->OpenCount++;\r
Disconnect = FALSE;\r
for ( Link = Prot->OpenList.ForwardLink; (Link != &Prot->OpenList) && (!Disconnect); Link = Link->ForwardLink) {\r
OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, OPEN_PROTOCOL_DATA_SIGNATURE);\r
- if (OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) {\r
+ if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
Disconnect = TRUE;\r
CoreReleaseProtocolLock ();\r
Status = CoreDisconnectController (UserHandle, OpenData->AgentHandle, NULL);\r
\r
@param UserHandle The handle to close the protocol interface on\r
@param Protocol The ID of the protocol\r
- @param EntryBuffer A pointer to a buffer of open protocol\r
- information in the form of\r
- EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures.\r
+ @param EntryBuffer A pointer to a buffer of open protocol information in the\r
+ form of EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures.\r
@param EntryCount Number of EntryBuffer entries\r
\r
+ @retval EFI_SUCCESS The open protocol information was returned in EntryBuffer, \r
+ and the number of entries was returned EntryCount.\r
+ @retval EFI_NOT_FOUND Handle does not support the protocol specified by Protocol.\r
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources available to allocate EntryBuffer.\r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r