/** @file\r
- UEFI notify infrastructure\r
+ Support functions for UEFI protocol notification infrastructure.\r
\r
-Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2006 - 2008, 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
\r
-#include <DxeMain.h>\r
+#include "DxeMain.h"\r
+#include "Handle.h"\r
\r
\r
/**\r
/**\r
Removes Protocol from the protocol list (but not the handle list).\r
\r
- @param Handle The handle to remove protocol on. \r
- @param Protocol GUID of the protocol to be moved \r
- @param Interface The interface of the protocol \r
+ @param Handle The handle to remove protocol on.\r
+ @param Protocol GUID of the protocol to be moved\r
+ @param Interface The interface of the protocol\r
\r
@return Protocol Entry\r
\r
/**\r
Add a new protocol notification record for the request protocol.\r
\r
- @param Protocol The requested protocol to add the notify \r
- registration \r
- @param Event The event to signal \r
- @param Registration Returns the registration record \r
+ @param Protocol The requested protocol to add the notify\r
+ registration\r
+ @param Event The event to signal\r
+ @param Registration Returns the registration record\r
\r
- @retval EFI_INVALID_PARAMETER Invalid parameter \r
- @retval EFI_SUCCESS Successfully returned the registration record \r
+ @retval EFI_INVALID_PARAMETER Invalid parameter\r
+ @retval EFI_SUCCESS Successfully returned the registration record\r
that has been added\r
\r
**/\r
PROTOCOL_ENTRY *ProtEntry;\r
PROTOCOL_NOTIFY *ProtNotify;\r
EFI_STATUS Status;\r
- \r
+\r
if ((Protocol == NULL) || (Event == NULL) || (Registration == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
CoreAcquireProtocolLock ();\r
\r
ProtNotify = NULL;\r
- \r
+\r
//\r
// Get the protocol entry to add the notification too\r
//\r
//\r
// Allocate a new notification record\r
//\r
- ProtNotify = CoreAllocateBootServicesPool (sizeof(PROTOCOL_NOTIFY));\r
+ ProtNotify = AllocatePool (sizeof(PROTOCOL_NOTIFY));\r
if (ProtNotify != NULL) {\r
- \r
+\r
ProtNotify->Signature = PROTOCOL_NOTIFY_SIGNATURE;\r
ProtNotify->Protocol = ProtEntry;\r
ProtNotify->Event = Event;\r
//\r
// start at the begining\r
//\r
- ProtNotify->Position = &ProtEntry->Protocols; \r
+ ProtNotify->Position = &ProtEntry->Protocols;\r
\r
InsertTailList (&ProtEntry->Notify, &ProtNotify->Link);\r
}\r
/**\r
Reinstall a protocol interface on a device handle. The OldInterface for Protocol is replaced by the NewInterface.\r
\r
- @param UserHandle Handle on which the interface is to be \r
- reinstalled \r
- @param Protocol The numeric ID of the interface \r
- @param OldInterface A pointer to the old interface \r
- @param NewInterface A pointer to the new interface \r
+ @param UserHandle Handle on which the interface is to be\r
+ reinstalled\r
+ @param Protocol The numeric ID of the interface\r
+ @param OldInterface A pointer to the old interface\r
+ @param NewInterface A pointer to the new interface\r
\r
@retval EFI_SUCCESS The protocol interface was installed\r
@retval EFI_NOT_FOUND The OldInterface on the handle was not found\r
//\r
Prot = CoreFindProtocolInterface (UserHandle, Protocol, OldInterface);\r
if (Prot == NULL) {\r
- CoreReleaseProtocolLock ();\r
- return EFI_NOT_FOUND;\r
+ Status = EFI_NOT_FOUND;\r
+ goto Done;\r
}\r
\r
//\r
//\r
// One or more drivers refused to release, so return the error\r
//\r
- CoreReleaseProtocolLock ();\r
- return Status;\r
+ goto Done;\r
}\r
\r
//\r
Prot = CoreRemoveInterfaceFromProtocol (Handle, Protocol, OldInterface);\r
\r
if (Prot == NULL) {\r
- CoreReleaseProtocolLock ();\r
- return EFI_NOT_FOUND;\r
+ Status = EFI_NOT_FOUND;\r
+ goto Done;\r
}\r
\r
ProtEntry = Prot->Protocol;\r
// Release the lock and connect all drivers to UserHandle\r
//\r
CoreReleaseProtocolLock ();\r
- Status = CoreConnectController (\r
- UserHandle, \r
- NULL, \r
- NULL, \r
- TRUE\r
- );\r
+ //\r
+ // Return code is ignored on purpose.\r
+ //\r
+ CoreConnectController (\r
+ UserHandle,\r
+ NULL,\r
+ NULL,\r
+ TRUE\r
+ );\r
CoreAcquireProtocolLock ();\r
- \r
+\r
//\r
// Notify the notification list for this protocol\r
//\r
CoreNotifyProtocolEntry (ProtEntry);\r
\r
+ Status = EFI_SUCCESS;\r
+\r
+Done:\r
CoreReleaseProtocolLock ();\r
- \r
- return EFI_SUCCESS;\r
+\r
+ return Status;\r
}\r