]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Hand/Notify.c
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Hand / Notify.c
index 8d64a5c8831b30a86fd757762ccb15511d03fc44..553413a3509cf231363baa889aeac90043510abb 100644 (file)
@@ -1,37 +1,26 @@
-/** @file \r
+/** @file\r
+  Support functions for UEFI protocol notification infrastructure.\r
 \r
-  UEFI notify infrastructure\r
-\r
-Copyright (c) 2006 - 2008, Intel Corporation                                                         \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
+#include "DxeMain.h"\r
+#include "Handle.h"\r
+#include "Event.h"\r
+\r
+/**\r
+  Signal event for every protocol in protocol entry.\r
 \r
+  @param  ProtEntry              Protocol entry\r
+\r
+**/\r
 VOID\r
 CoreNotifyProtocolEntry (\r
   IN PROTOCOL_ENTRY   *ProtEntry\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Signal event for every protocol in protocol entry.\r
-\r
-Arguments:\r
-\r
-  ProtEntry     - Protocol entry\r
-\r
-Returns:\r
-\r
---*/\r
 {\r
   PROTOCOL_NOTIFY     *ProtNotify;\r
   LIST_ENTRY          *Link;\r
@@ -45,31 +34,23 @@ Returns:
 }\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
+\r
+  @return Protocol Entry\r
+\r
+**/\r
 PROTOCOL_INTERFACE *\r
 CoreRemoveInterfaceFromProtocol (\r
   IN IHANDLE        *Handle,\r
   IN EFI_GUID       *Protocol,\r
   IN VOID           *Interface\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Removes Protocol from the protocol list (but not the handle list).\r
-\r
-Arguments:\r
-\r
-  Handle -  The handle to remove protocol on.\r
-\r
-  Protocol  -  GUID of the protocol to be moved\r
-\r
-  Interface - The interface of the protocol\r
-\r
-Returns:\r
-\r
-  Protocol Entry\r
-\r
---*/\r
 {\r
   PROTOCOL_INTERFACE  *Prot;\r
   PROTOCOL_NOTIFY     *ProtNotify;\r
@@ -86,7 +67,6 @@ Returns:
     //\r
     // If there's a protocol notify location pointing to this entry, back it up one\r
     //\r
-\r
     for(Link = ProtEntry->Notify.ForwardLink; Link != &ProtEntry->Notify; Link=Link->ForwardLink) {\r
       ProtNotify = CR(Link, PROTOCOL_NOTIFY, Link, PROTOCOL_NOTIFY_SIGNATURE);\r
 \r
@@ -98,7 +78,6 @@ Returns:
     //\r
     // Remove the protocol interface entry\r
     //\r
-\r
     RemoveEntryList (&Prot->ByProtocol);\r
   }\r
 \r
@@ -106,41 +85,31 @@ Returns:
 }\r
 \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
 \r
+  @retval EFI_INVALID_PARAMETER  Invalid parameter\r
+  @retval EFI_SUCCESS            Successfully returned the registration record\r
+                                 that has been added\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 CoreRegisterProtocolNotify (\r
   IN EFI_GUID       *Protocol,\r
   IN EFI_EVENT      Event,\r
-  OUT  VOID           **Registration\r
+  OUT  VOID         **Registration\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Add a new protocol notification record for the request protocol.\r
-\r
-Arguments:\r
-\r
-  Protocol      - The requested protocol to add the notify registration\r
-\r
-  Event         - The event to signal \r
-\r
-  Registration  - Returns the registration record\r
-\r
-\r
-Returns:\r
-\r
-  EFI_INVALID_PARAMETER       - Invalid parameter\r
-\r
-  EFI_SUCCESS                 - Successfully returned the registration record that has been added\r
-  \r
---*/\r
 {\r
-  PROTOCOL_ENTRY      *ProtEntry;\r
-  PROTOCOL_NOTIFY     *ProtNotify;\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
@@ -148,7 +117,7 @@ Returns:
   CoreAcquireProtocolLock ();\r
 \r
   ProtNotify = NULL;\r
-  \r
+\r
   //\r
   // Get the protocol entry to add the notification too\r
   //\r
@@ -159,18 +128,16 @@ Returns:
     //\r
     // Allocate a new notification record\r
     //\r
-\r
-    ProtNotify = CoreAllocateBootServicesPool (sizeof(PROTOCOL_NOTIFY));\r
-\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
       // start at the begining\r
       //\r
-      ProtNotify->Position = &ProtEntry->Protocols; \r
+      ProtNotify->Position = &ProtEntry->Protocols;\r
 \r
       InsertTailList (&ProtEntry->Notify, &ProtNotify->Link);\r
     }\r
@@ -193,7 +160,20 @@ Returns:
 }\r
 \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
+\r
+  @retval EFI_SUCCESS            The protocol interface was installed\r
+  @retval EFI_NOT_FOUND          The OldInterface on the handle was not found\r
+  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value\r
 \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 CoreReinstallProtocolInterface (\r
@@ -202,29 +182,6 @@ CoreReinstallProtocolInterface (
   IN VOID           *OldInterface,\r
   IN VOID           *NewInterface\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Reinstall a protocol interface on a device handle.  The OldInterface for Protocol is replaced by the NewInterface.\r
-\r
-Arguments:\r
-\r
-  UserHandle    - Handle on which the interface is to be reinstalled\r
-  Protocol      - The numeric ID of the interface\r
-  OldInterface  - A pointer to the old interface\r
-  NewInterface  - A pointer to the new interface \r
-\r
-\r
-Returns:\r
-\r
-  Status code.\r
-\r
-  On EFI_SUCCESS            The protocol interface was installed\r
-  On EFI_NOT_FOUND          The OldInterface on the handle was not found\r
-  On EFI_INVALID_PARAMETER  One of the parameters has an invalid value\r
-  \r
---*/\r
 {\r
   EFI_STATUS                Status;\r
   IHANDLE                   *Handle;\r
@@ -252,8 +209,8 @@ Returns:
   //\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
@@ -267,8 +224,7 @@ Returns:
     //\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
@@ -277,8 +233,8 @@ Returns:
   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
@@ -304,20 +260,26 @@ Returns:
   // 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