]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Event/Timer.c
MdeModulePkg/Core: Merge memory map after filtering paging capability
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Event / Timer.c
index d0ca1fc9fca1c88aec758faee811dbbcfea7f1ff..6cd4e6c1854bbbbf71c1cf6645ff797027f79644 100644 (file)
@@ -1,8 +1,8 @@
 /** @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
+Copyright (c) 2006 - 2013, 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
@@ -51,20 +51,20 @@ CoreInsertEventTimer (
   //\r
   // Get the timer's trigger time\r
   //\r
-  TriggerTime = Event->u.Timer.TriggerTime;\r
+  TriggerTime = Event->Timer.TriggerTime;\r
 \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, u.Timer.Link, EVENT_SIGNATURE);\r
+    Event2 = CR (Link, IEVENT, Timer.Link, EVENT_SIGNATURE);\r
 \r
-    if (Event2->u.Timer.TriggerTime > TriggerTime) {\r
+    if (Event2->Timer.TriggerTime > TriggerTime) {\r
       break;\r
     }\r
   }\r
 \r
-  InsertTailList (Link, &Event->u.Timer.Link);\r
+  InsertTailList (Link, &Event->Timer.Link);\r
 }\r
 \r
 /**\r
@@ -112,12 +112,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
@@ -125,8 +125,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
@@ -136,17 +136,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
@@ -172,11 +172,12 @@ CoreInitializeTimer (
 {\r
   EFI_STATUS  Status;\r
 \r
-  Status = CoreCreateEvent (\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
@@ -186,7 +187,7 @@ CoreInitializeTimer (
 /**\r
   Called by the platform code to process a tick.\r
 \r
-  @param  Duration               The number of 100ns elasped since the last call\r
+  @param  Duration               The number of 100ns elapsed since the last call\r
                                  to TimerTick\r
 \r
 **/\r
@@ -213,9 +214,9 @@ CoreTimerTick (
   // to process it\r
   //\r
   if (!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
-    if (Event->u.Timer.TriggerTime <= mEfiSystemTime) {\r
+    if (Event->Timer.TriggerTime <= mEfiSystemTime) {\r
       CoreSignalEvent (mEfiCheckTimerEvent);\r
     }\r
   }\r
@@ -260,7 +261,7 @@ CoreSetTimer (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (Type < 0 || Type > TimerRelative  || (Event->Type & EVT_TIMER) == 0) {\r
+  if ((UINT32)Type > TimerRelative  || (Event->Type & EVT_TIMER) == 0) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -269,21 +270,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
+      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