]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Event/Event.c
Update the copyright notice format
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Event / Event.c
index 1f458a402a871ae72db8550d827a40d7d76530c1..bc01256960fc5dce0ca98cda9dc860cf7a26dad6 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   UEFI Event support functions implemented in this file.\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
@@ -13,51 +13,77 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 \r
-#include <DxeMain.h>\r
+#include "DxeMain.h"\r
+#include "Event.h"\r
 \r
-//\r
-// Enumerate the valid types\r
-//\r
+///\r
+/// gEfiCurrentTpl - Current Task priority level\r
+///\r
+EFI_TPL  gEfiCurrentTpl = TPL_APPLICATION;\r
+\r
+///\r
+/// gEventQueueLock - Protects the event queus\r
+///\r
+EFI_LOCK gEventQueueLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
+\r
+///\r
+/// gEventQueue - A list of event's to notify for each priority level\r
+///\r
+LIST_ENTRY      gEventQueue[TPL_HIGH_LEVEL + 1];\r
+\r
+///\r
+/// gEventPending - A bitmask of the EventQueues that are pending\r
+///\r
+UINTN           gEventPending = 0;\r
+\r
+///\r
+/// gEventSignalQueue - A list of events to signal based on EventGroup type\r
+///\r
+LIST_ENTRY      gEventSignalQueue = INITIALIZE_LIST_HEAD_VARIABLE (gEventSignalQueue);\r
+\r
+///\r
+/// Enumerate the valid types\r
+///\r
 UINT32 mEventTable[] = {\r
-  //\r
-  // 0x80000200       Timer event with a notification function that is\r
-  // queue when the event is signaled with SignalEvent()\r
-  //\r
+  ///\r
+  /// 0x80000200       Timer event with a notification function that is\r
+  /// queue when the event is signaled with SignalEvent()\r
+  ///\r
   EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
-  //\r
-  // 0x80000000       Timer event without a notification function. It can be\r
-  // signaled with SignalEvent() and checked with CheckEvent() or WaitForEvent().\r
-  //\r
+  ///\r
+  /// 0x80000000       Timer event without a notification function. It can be\r
+  /// signaled with SignalEvent() and checked with CheckEvent() or WaitForEvent().\r
+  ///\r
   EVT_TIMER,\r
-  //\r
-  // 0x00000100       Generic event with a notification function that\r
-  // can be waited on with CheckEvent() or WaitForEvent()\r
-  //\r
+  ///\r
+  /// 0x00000100       Generic event with a notification function that\r
+  /// can be waited on with CheckEvent() or WaitForEvent()\r
+  ///\r
   EVT_NOTIFY_WAIT,\r
-  //\r
-  // 0x00000200       Generic event with a notification function that\r
-  // is queue when the event is signaled with SignalEvent()\r
-  //\r
+  ///\r
+  /// 0x00000200       Generic event with a notification function that\r
+  /// is queue when the event is signaled with SignalEvent()\r
+  ///\r
   EVT_NOTIFY_SIGNAL,\r
-  //\r
-  // 0x00000201       ExitBootServicesEvent.\r
-  //\r
+  ///\r
+  /// 0x00000201       ExitBootServicesEvent.\r
+  ///\r
   EVT_SIGNAL_EXIT_BOOT_SERVICES,\r
-  //\r
-  // 0x60000202       SetVirtualAddressMapEvent.\r
-  //\r
+  ///\r
+  /// 0x60000202       SetVirtualAddressMapEvent.\r
+  ///\r
   EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,\r
 \r
-  //\r
-  // 0x00000000       Generic event without a notification function.\r
-  // It can be signaled with SignalEvent() and checked with CheckEvent()\r
-  // or WaitForEvent().\r
-  //\r
+  ///\r
+  /// 0x00000000       Generic event without a notification function.\r
+  /// It can be signaled with SignalEvent() and checked with CheckEvent()\r
+  /// or WaitForEvent().\r
+  ///\r
   0x00000000,\r
-  //\r
-  // 0x80000100       Timer event with a notification function that can be\r
-  // waited on with CheckEvent() or WaitForEvent()\r
-  //\r
+  ///\r
+  /// 0x80000100       Timer event with a notification function that can be\r
+  /// waited on with CheckEvent() or WaitForEvent()\r
+  ///\r
   EVT_TIMER | EVT_NOTIFY_WAIT,\r
 };\r
 \r
@@ -90,7 +116,7 @@ CoreReleaseEventLock (
 \r
 \r
 /**\r
-  Initializes "event" support and populates parts of the System and Runtime Table.\r
+  Initializes "event" support.\r
 \r
   @retval EFI_SUCCESS            Always return success\r
 \r
@@ -116,7 +142,7 @@ CoreInitializeEventServices (
 /**\r
   Dispatches all pending events.\r
 \r
-  @param  Priority               The task priority level of event notifications \r
+  @param  Priority               The task priority level of event notifications\r
                                  to dispatch\r
 \r
 **/\r
@@ -146,7 +172,7 @@ CoreDispatchEventNotifies (
     // Only clear the SIGNAL status if it is a SIGNAL type event.\r
     // WAIT type events are only cleared in CheckEvent()\r
     //\r
-    if (Event->Type & EVT_NOTIFY_SIGNAL) {\r
+    if ((Event->Type & EVT_NOTIFY_SIGNAL) != 0) {\r
       Event->SignalCount = 0;\r
     }\r
 \r
@@ -239,18 +265,18 @@ CoreNotifySignalList (
 /**\r
   Creates a general-purpose event structure.\r
 \r
-  @param  Type                   The type of event to create and its mode and \r
-                                 attributes \r
-  @param  NotifyTpl              The task priority level of event notifications \r
-  @param  NotifyFunction         Pointer to the events notification function \r
-  @param  NotifyContext          Pointer to the notification functions context; \r
-                                 corresponds to parameter "Context" in the \r
-                                 notification function \r
-  @param  Event                  Pointer to the newly created event if the call \r
-                                 succeeds; undefined otherwise \r
-\r
-  @retval EFI_SUCCESS            The event structure was created \r
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value \r
+  @param  Type                   The type of event to create and its mode and\r
+                                 attributes\r
+  @param  NotifyTpl              The task priority level of event notifications\r
+  @param  NotifyFunction         Pointer to the events notification function\r
+  @param  NotifyContext          Pointer to the notification functions context;\r
+                                 corresponds to parameter "Context" in the\r
+                                 notification function\r
+  @param  Event                  Pointer to the newly created event if the call\r
+                                 succeeds; undefined otherwise\r
+\r
+  @retval EFI_SUCCESS            The event structure was created\r
+  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value\r
   @retval EFI_OUT_OF_RESOURCES   The event could not be allocated\r
 \r
 **/\r
@@ -272,20 +298,20 @@ CoreCreateEvent (
 /**\r
   Creates a general-purpose event structure\r
 \r
-  @param  Type                   The type of event to create and its mode and \r
-                                 attributes \r
-  @param  NotifyTpl              The task priority level of event notifications \r
-  @param  NotifyFunction         Pointer to the events notification function \r
-  @param  NotifyContext          Pointer to the notification functions context; \r
-                                 corresponds to parameter "Context" in the \r
-                                 notification function \r
-  @param  EventGroup             GUID for EventGroup if NULL act the same as \r
-                                 gBS->CreateEvent(). \r
-  @param  Event                  Pointer to the newly created event if the call \r
-                                 succeeds; undefined otherwise \r
-\r
-  @retval EFI_SUCCESS            The event structure was created \r
-  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value \r
+  @param  Type                   The type of event to create and its mode and\r
+                                 attributes\r
+  @param  NotifyTpl              The task priority level of event notifications\r
+  @param  NotifyFunction         Pointer to the events notification function\r
+  @param  NotifyContext          Pointer to the notification functions context;\r
+                                 corresponds to parameter "Context" in the\r
+                                 notification function\r
+  @param  EventGroup             GUID for EventGroup if NULL act the same as\r
+                                 gBS->CreateEvent().\r
+  @param  Event                  Pointer to the newly created event if the call\r
+                                 succeeds; undefined otherwise\r
+\r
+  @retval EFI_SUCCESS            The event structure was created\r
+  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value\r
   @retval EFI_OUT_OF_RESOURCES   The event could not be allocated\r
 \r
 **/\r
@@ -305,7 +331,7 @@ CoreCreateEventEx (
   INTN            Index;\r
 \r
 \r
-  if ((Event == NULL) || (NotifyTpl == TPL_APPLICATION)) {\r
+  if (Event == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -358,7 +384,7 @@ CoreCreateEventEx (
     // Check for an invalid NotifyFunction or NotifyTpl\r
     //\r
     if ((NotifyFunction == NULL) ||\r
-        (NotifyTpl < TPL_APPLICATION) ||\r
+        (NotifyTpl <= TPL_APPLICATION) ||\r
        (NotifyTpl >= TPL_HIGH_LEVEL)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
@@ -373,19 +399,17 @@ CoreCreateEventEx (
   }\r
 \r
   //\r
-  // Allcoate and initialize a new event structure.\r
+  // Allocate and initialize a new event structure.\r
   //\r
-  Status = CoreAllocatePool (\r
-             ((Type & EVT_RUNTIME) != 0) ? EfiRuntimeServicesData: EfiBootServicesData,\r
-             sizeof (IEVENT),\r
-             (VOID **)&IEvent\r
-             );\r
-  if (EFI_ERROR (Status)) {\r
+  if ((Type & EVT_RUNTIME) != 0) {\r
+    IEvent = AllocateRuntimeZeroPool (sizeof (IEVENT));\r
+  } else {\r
+    IEvent = AllocateZeroPool (sizeof (IEVENT));\r
+  }\r
+  if (IEvent == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  ZeroMem (IEvent, sizeof (IEVENT));\r
-\r
   IEvent->Signature = EVENT_SIGNATURE;\r
   IEvent->Type = Type;\r
 \r
@@ -436,7 +460,7 @@ CoreCreateEventEx (
 \r
   @param  UserEvent              The event to signal .\r
 \r
-  @retval EFI_INVALID_PARAMETER  Parameters are not valid. \r
+  @retval EFI_INVALID_PARAMETER  Parameters are not valid.\r
   @retval EFI_SUCCESS            The event was signaled.\r
 \r
 **/\r
@@ -470,7 +494,7 @@ CoreSignalEvent (
     //\r
     // If signalling type is a notify function, queue it\r
     //\r
-    if (Event->Type & EVT_NOTIFY_SIGNAL) {\r
+    if ((Event->Type & EVT_NOTIFY_SIGNAL) != 0) {\r
       if (Event->ExFlag) {\r
         //\r
         // The CreateEventEx() style requires all members of the Event Group\r
@@ -494,10 +518,10 @@ CoreSignalEvent (
 /**\r
   Check the status of an event.\r
 \r
-  @param  UserEvent              The event to check \r
+  @param  UserEvent              The event to check\r
 \r
-  @retval EFI_SUCCESS            The event is in the signaled state \r
-  @retval EFI_NOT_READY          The event is not in the signaled state \r
+  @retval EFI_SUCCESS            The event is in the signaled state\r
+  @retval EFI_NOT_READY          The event is not in the signaled state\r
   @retval EFI_INVALID_PARAMETER  Event is of type EVT_NOTIFY_SIGNAL\r
 \r
 **/\r
@@ -526,13 +550,13 @@ CoreCheckEvent (
 \r
   Status = EFI_NOT_READY;\r
 \r
-  if (!Event->SignalCount && (Event->Type & EVT_NOTIFY_WAIT)) {\r
+  if ((Event->SignalCount == 0) && ((Event->Type & EVT_NOTIFY_WAIT) != 0)) {\r
 \r
     //\r
     // Queue the wait notify function\r
     //\r
     CoreAcquireEventLock ();\r
-    if (!Event->SignalCount) {\r
+    if (Event->SignalCount == 0) {\r
       CoreNotifyEvent (Event);\r
     }\r
     CoreReleaseEventLock ();\r
@@ -542,10 +566,10 @@ CoreCheckEvent (
   // If the even looks signalled, get the lock and clear it\r
   //\r
 \r
-  if (Event->SignalCount) {\r
+  if (Event->SignalCount != 0) {\r
     CoreAcquireEventLock ();\r
 \r
-    if (Event->SignalCount) {\r
+    if (Event->SignalCount != 0) {\r
       Event->SignalCount = 0;\r
       Status = EFI_SUCCESS;\r
     }\r
@@ -561,14 +585,14 @@ CoreCheckEvent (
 /**\r
   Stops execution until an event is signaled.\r
 \r
-  @param  NumberOfEvents         The number of events in the UserEvents array \r
-  @param  UserEvents             An array of EFI_EVENT \r
-  @param  UserIndex              Pointer to the index of the event which \r
-                                 satisfied the wait condition \r
+  @param  NumberOfEvents         The number of events in the UserEvents array\r
+  @param  UserEvents             An array of EFI_EVENT\r
+  @param  UserIndex              Pointer to the index of the event which\r
+                                 satisfied the wait condition\r
 \r
-  @retval EFI_SUCCESS            The event indicated by Index was signaled. \r
-  @retval EFI_INVALID_PARAMETER  The event indicated by Index has a notification \r
-                                 function or Event was not a valid type \r
+  @retval EFI_SUCCESS            The event indicated by Index was signaled.\r
+  @retval EFI_INVALID_PARAMETER  The event indicated by Index has a notification\r
+                                 function or Event was not a valid type\r
   @retval EFI_UNSUPPORTED        The current TPL is not TPL_APPLICATION\r
 \r
 **/\r
@@ -616,9 +640,9 @@ CoreWaitForEvent (
 /**\r
   Closes an event and frees the event structure.\r
 \r
-  @param  UserEvent              Event to close \r
+  @param  UserEvent              Event to close\r
 \r
-  @retval EFI_INVALID_PARAMETER  Parameters are not valid. \r
+  @retval EFI_INVALID_PARAMETER  Parameters are not valid.\r
   @retval EFI_SUCCESS            The event has been closed\r
 \r
 **/\r