]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Event/Timer.c
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Event / Timer.c
index 3eabbaabaade51f9cf4f329bdf73b8fb1ceb1bb2..29e507c67c50050f13b5141ef55deab4d7ea419e 100644 (file)
@@ -1,48 +1,28 @@
 /** @file\r
   Core Timer Services\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 - 2013, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
-\r
-#include <DxeMain.h>\r
+#include "DxeMain.h"\r
+#include "Event.h"\r
 \r
 //\r
-// Internal prototypes\r
+// Internal data\r
 //\r
-/**\r
-  Returns the current system time.\r
 \r
-  @return The current system time\r
+LIST_ENTRY  mEfiTimerList       = INITIALIZE_LIST_HEAD_VARIABLE (mEfiTimerList);\r
+EFI_LOCK    mEfiTimerLock       = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL - 1);\r
+EFI_EVENT   mEfiCheckTimerEvent = NULL;\r
 \r
-**/\r
-UINT64\r
-CoreCurrentSystemTime (\r
-  VOID\r
-  );\r
+EFI_LOCK  mEfiSystemTimeLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
+UINT64    mEfiSystemTime     = 0;\r
 \r
-/**\r
-  Checks the sorted timer list against the current system time.\r
-  Signals any expired event timer.\r
-\r
-  @param  CheckEvent             Not used\r
-  @param  Context                Not used\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-CoreCheckTimers (\r
-  IN EFI_EVENT            CheckEvent,\r
-  IN VOID                 *Context\r
-  );\r
+//\r
+// Timer functions\r
+//\r
 \r
 /**\r
   Inserts the timer event.\r
@@ -53,45 +33,34 @@ CoreCheckTimers (
 **/\r
 VOID\r
 CoreInsertEventTimer (\r
-  IN IEVENT   *Event\r
-  );\r
-\r
-//\r
-// Internal data\r
-//\r
+  IN IEVENT  *Event\r
+  )\r
+{\r
+  UINT64      TriggerTime;\r
+  LIST_ENTRY  *Link;\r
+  IEVENT      *Event2;\r
 \r
-LIST_ENTRY       mEfiTimerList = INITIALIZE_LIST_HEAD_VARIABLE (mEfiTimerList);\r
-EFI_LOCK         mEfiTimerLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL - 1);\r
-EFI_EVENT        mEfiCheckTimerEvent = NULL;\r
+  ASSERT_LOCKED (&mEfiTimerLock);\r
 \r
-EFI_LOCK         mEfiSystemTimeLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
-UINT64           mEfiSystemTime = 0;\r
+  //\r
+  // Get the timer's trigger time\r
+  //\r
+  TriggerTime = Event->Timer.TriggerTime;\r
 \r
-//\r
-// Timer functions\r
-//\r
-/**\r
-  Initializes timer support.\r
+  //\r
+  // Insert the timer into the timer database in assending sorted order\r
+  //\r
+  for (Link = mEfiTimerList.ForwardLink; Link != &mEfiTimerList; Link = Link->ForwardLink) {\r
+    Event2 = CR (Link, IEVENT, Timer.Link, EVENT_SIGNATURE);\r
 \r
-**/\r
-VOID\r
-CoreInitializeTimer (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
+    if (Event2->Timer.TriggerTime > TriggerTime) {\r
+      break;\r
+    }\r
+  }\r
 \r
-  Status = CoreCreateEvent (\r
-             EVT_NOTIFY_SIGNAL,\r
-             TPL_HIGH_LEVEL - 1,\r
-             CoreCheckTimers,\r
-             NULL,\r
-             &mEfiCheckTimerEvent\r
-             );\r
-  ASSERT_EFI_ERROR (Status);\r
+  InsertTailList (Link, &Event->Timer.Link);\r
 }\r
 \r
-\r
 /**\r
   Returns the current system time.\r
 \r
@@ -103,7 +72,7 @@ CoreCurrentSystemTime (
   VOID\r
   )\r
 {\r
-  UINT64          SystemTime;\r
+  UINT64  SystemTime;\r
 \r
   CoreAcquireLock (&mEfiSystemTimeLock);\r
   SystemTime = mEfiSystemTime;\r
@@ -112,48 +81,6 @@ CoreCurrentSystemTime (
   return SystemTime;\r
 }\r
 \r
-\r
-/**\r
-  Called by the platform code to process a tick.\r
-\r
-  @param  Duration               The number of 100ns elasped since the last call\r
-                                 to TimerTick\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-CoreTimerTick (\r
-  IN UINT64   Duration\r
-  )\r
-{\r
-  IEVENT          *Event;\r
-\r
-  //\r
-  // Check runtiem flag in case there are ticks while exiting boot services\r
-  //\r
-  CoreAcquireLock (&mEfiSystemTimeLock);\r
-\r
-  //\r
-  // Update the system time\r
-  //\r
-  mEfiSystemTime += Duration;\r
-\r
-  //\r
-  // If the head of the list is expired, fire the timer event\r
-  // to process it\r
-  //\r
-  if (!IsListEmpty (&mEfiTimerList)) {\r
-    Event = CR (mEfiTimerList.ForwardLink, IEVENT, u.Timer.Link, EVENT_SIGNATURE);\r
-\r
-    if (Event->u.Timer.TriggerTime <= mEfiSystemTime) {\r
-      CoreSignalEvent (mEfiCheckTimerEvent);\r
-    }\r
-  }\r
-\r
-  CoreReleaseLock (&mEfiSystemTimeLock);\r
-}\r
-\r
-\r
 /**\r
   Checks the sorted timer list against the current system time.\r
   Signals any expired event timer.\r
@@ -165,12 +92,12 @@ CoreTimerTick (
 VOID\r
 EFIAPI\r
 CoreCheckTimers (\r
-  IN EFI_EVENT            CheckEvent,\r
-  IN VOID                 *Context\r
+  IN EFI_EVENT  CheckEvent,\r
+  IN VOID       *Context\r
   )\r
 {\r
-  UINT64                  SystemTime;\r
-  IEVENT                  *Event;\r
+  UINT64  SystemTime;\r
+  IEVENT  *Event;\r
 \r
   //\r
   // Check the timer database for expired timers\r
@@ -179,12 +106,12 @@ CoreCheckTimers (
   SystemTime = CoreCurrentSystemTime ();\r
 \r
   while (!IsListEmpty (&mEfiTimerList)) {\r
-    Event = CR (mEfiTimerList.ForwardLink, IEVENT, u.Timer.Link, EVENT_SIGNATURE);\r
+    Event = CR (mEfiTimerList.ForwardLink, IEVENT, Timer.Link, EVENT_SIGNATURE);\r
 \r
     //\r
     // If this timer is not expired, then we're done\r
     //\r
-    if (Event->u.Timer.TriggerTime > SystemTime) {\r
+    if (Event->Timer.TriggerTime > SystemTime) {\r
       break;\r
     }\r
 \r
@@ -192,8 +119,8 @@ CoreCheckTimers (
     // Remove this timer from the timer queue\r
     //\r
 \r
-    RemoveEntryList (&Event->u.Timer.Link);\r
-    Event->u.Timer.Link.ForwardLink = NULL;\r
+    RemoveEntryList (&Event->Timer.Link);\r
+    Event->Timer.Link.ForwardLink = NULL;\r
 \r
     //\r
     // Signal it\r
@@ -203,17 +130,17 @@ CoreCheckTimers (
     //\r
     // If this is a periodic timer, set it\r
     //\r
-    if (Event->u.Timer.Period) {\r
+    if (Event->Timer.Period != 0) {\r
       //\r
       // Compute the timers new trigger time\r
       //\r
-      Event->u.Timer.TriggerTime = Event->u.Timer.TriggerTime + Event->u.Timer.Period;\r
+      Event->Timer.TriggerTime = Event->Timer.TriggerTime + Event->Timer.Period;\r
 \r
       //\r
       // If that's before now, then reset the timer to start from now\r
       //\r
-      if (Event->u.Timer.TriggerTime <= SystemTime) {\r
-        Event->u.Timer.TriggerTime = SystemTime;\r
+      if (Event->Timer.TriggerTime <= SystemTime) {\r
+        Event->Timer.TriggerTime = SystemTime;\r
         CoreSignalEvent (mEfiCheckTimerEvent);\r
       }\r
 \r
@@ -227,46 +154,68 @@ CoreCheckTimers (
   CoreReleaseLock (&mEfiTimerLock);\r
 }\r
 \r
+/**\r
+  Initializes timer support.\r
+\r
+**/\r
+VOID\r
+CoreInitializeTimer (\r
+  VOID\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+\r
+  Status = CoreCreateEventInternal (\r
+             EVT_NOTIFY_SIGNAL,\r
+             TPL_HIGH_LEVEL - 1,\r
+             CoreCheckTimers,\r
+             NULL,\r
+             NULL,\r
+             &mEfiCheckTimerEvent\r
+             );\r
+  ASSERT_EFI_ERROR (Status);\r
+}\r
 \r
 /**\r
-  Inserts the timer event.\r
+  Called by the platform code to process a tick.\r
 \r
-  @param  Event                  Points to the internal structure of timer event\r
-                                 to be installed\r
+  @param  Duration               The number of 100ns elapsed since the last call\r
+                                 to TimerTick\r
 \r
 **/\r
 VOID\r
-CoreInsertEventTimer (\r
-  IN IEVENT   *Event\r
+EFIAPI\r
+CoreTimerTick (\r
+  IN UINT64  Duration\r
   )\r
 {\r
-  UINT64          TriggerTime;\r
-  LIST_ENTRY      *Link;\r
-  IEVENT          *Event2;\r
+  IEVENT  *Event;\r
 \r
-  ASSERT_LOCKED (&mEfiTimerLock);\r
+  //\r
+  // Check runtiem flag in case there are ticks while exiting boot services\r
+  //\r
+  CoreAcquireLock (&mEfiSystemTimeLock);\r
 \r
   //\r
-  // Get the timer's trigger time\r
+  // Update the system time\r
   //\r
-  TriggerTime = Event->u.Timer.TriggerTime;\r
+  mEfiSystemTime += Duration;\r
 \r
   //\r
-  // Insert the timer into the timer database in assending sorted order\r
+  // If the head of the list is expired, fire the timer event\r
+  // to process it\r
   //\r
-  for (Link = mEfiTimerList.ForwardLink; Link  != &mEfiTimerList; Link = Link->ForwardLink) {\r
-    Event2 = CR (Link, IEVENT, u.Timer.Link, EVENT_SIGNATURE);\r
+  if (!IsListEmpty (&mEfiTimerList)) {\r
+    Event = CR (mEfiTimerList.ForwardLink, IEVENT, Timer.Link, EVENT_SIGNATURE);\r
 \r
-    if (Event2->u.Timer.TriggerTime > TriggerTime) {\r
-      break;\r
+    if (Event->Timer.TriggerTime <= mEfiSystemTime) {\r
+      CoreSignalEvent (mEfiCheckTimerEvent);\r
     }\r
   }\r
 \r
-  InsertTailList (Link, &Event->u.Timer.Link);\r
+  CoreReleaseLock (&mEfiSystemTimeLock);\r
 }\r
 \r
-\r
-\r
 /**\r
   Sets the type of timer and the trigger time for a timer event.\r
 \r
@@ -285,12 +234,12 @@ CoreInsertEventTimer (
 EFI_STATUS\r
 EFIAPI\r
 CoreSetTimer (\r
-  IN EFI_EVENT            UserEvent,\r
-  IN EFI_TIMER_DELAY      Type,\r
-  IN UINT64               TriggerTime\r
+  IN EFI_EVENT        UserEvent,\r
+  IN EFI_TIMER_DELAY  Type,\r
+  IN UINT64           TriggerTime\r
   )\r
 {\r
-  IEVENT      *Event;\r
+  IEVENT  *Event;\r
 \r
   Event = UserEvent;\r
 \r
@@ -302,7 +251,7 @@ CoreSetTimer (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (Type < 0 || Type > TimerRelative  || !(Event->Type & EVT_TIMER)) {\r
+  if (((UINT32)Type > TimerRelative) || ((Event->Type & EVT_TIMER) == 0)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -311,21 +260,24 @@ CoreSetTimer (
   //\r
   // If the timer is queued to the timer database, remove it\r
   //\r
-  if (Event->u.Timer.Link.ForwardLink != NULL) {\r
-    RemoveEntryList (&Event->u.Timer.Link);\r
-    Event->u.Timer.Link.ForwardLink = NULL;\r
+  if (Event->Timer.Link.ForwardLink != NULL) {\r
+    RemoveEntryList (&Event->Timer.Link);\r
+    Event->Timer.Link.ForwardLink = NULL;\r
   }\r
 \r
-  Event->u.Timer.TriggerTime = 0;\r
-  Event->u.Timer.Period = 0;\r
+  Event->Timer.TriggerTime = 0;\r
+  Event->Timer.Period      = 0;\r
 \r
   if (Type != TimerCancel) {\r
-\r
     if (Type == TimerPeriodic) {\r
-      Event->u.Timer.Period = TriggerTime;\r
+      if (TriggerTime == 0) {\r
+        gTimer->GetTimerPeriod (gTimer, &TriggerTime);\r
+      }\r
+\r
+      Event->Timer.Period = TriggerTime;\r
     }\r
 \r
-    Event->u.Timer.TriggerTime = CoreCurrentSystemTime () + TriggerTime;\r
+    Event->Timer.TriggerTime = CoreCurrentSystemTime () + TriggerTime;\r
     CoreInsertEventTimer (Event);\r
 \r
     if (TriggerTime == 0) {\r