/** @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
-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
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
-#include <DxeMain.h>\r
-\r
+#include "DxeMain.h"\r
+#include "Handle.h"\r
+#include "Event.h"\r
\r
/**\r
Signal event for every protocol in protocol entry.\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
+ ((IEVENT *)Event)->ExFlag |= EVT_EXFLAG_EVENT_PROTOCOL_NOTIFICATION;\r
ProtNotify->Signature = PROTOCOL_NOTIFY_SIGNATURE;\r
ProtNotify->Protocol = ProtEntry;\r
ProtNotify->Event = Event;\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
CoreNotifyProtocolEntry (ProtEntry);\r
\r
+ Status = EFI_SUCCESS;\r
+\r
+Done:\r
CoreReleaseProtocolLock ();\r
\r
- return EFI_SUCCESS;\r
+ return Status;\r
}\r