]> git.proxmox.com Git - mirror_edk2.git/commitdiff
start timer at initialization
authortgingold <tgingold@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 13 Feb 2007 02:16:12 +0000 (02:16 +0000)
committertgingold <tgingold@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 13 Feb 2007 02:16:12 +0000 (02:16 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2377 6f19259b-4bc3-4df7-8a09-765794883524

EdkUnixPkg/Dxe/UnixThunk/Chipset/Timer/Timer.c
EdkUnixPkg/Dxe/UnixThunk/Chipset/Timer/Timer.h

index 8001138b948ffbd703511e609c6d5202b8a5202d..37fdde5ed3628435ef35a0b5e519781dc983c763 100644 (file)
@@ -48,12 +48,8 @@ EFI_TIMER_NOTIFY        mTimerNotifyFunction = NULL;
 //\r
 // The current period of the timer interrupt\r
 //\r
-UINT64                  mTimerPeriod;\r
+UINT64                  mTimerPeriodMs;\r
 \r
-//\r
-// The timer value from the last timer interrupt\r
-//\r
-UINT32                  mNtLastTick;\r
 \r
 VOID\r
 TimerCallback (UINT64 DeltaMs)
@@ -83,15 +79,17 @@ Returns:
 \r
   OriginalTPL = gBS->RaiseTPL (EFI_TPL_HIGH_LEVEL);\r
 \r
-  CallbackFunction = mTimerNotifyFunction;\r
+  if (OriginalTPL < EFI_TPL_HIGH_LEVEL) {
+    CallbackFunction = mTimerNotifyFunction;\r
 \r
-  //\r
-  // Only invoke the callback function if a Non-NULL handler has been\r
-  // registered. Assume all other handlers are legal.\r
-  //\r
-  if (CallbackFunction != NULL) {\r
-    CallbackFunction ((UINT64) (DeltaMs * 10000));\r
-  }\r
+    //\r
+    // Only invoke the callback function if a Non-NULL handler has been\r
+    // registered. Assume all other handlers are legal.\r
+    //\r
+    if (CallbackFunction != NULL) {\r
+      CallbackFunction ((UINT64) (DeltaMs * 10000));\r
+    }\r
+  }
 \r
   gBS->RestoreTPL (OriginalTPL);\r
 \r
@@ -161,7 +159,7 @@ Returns:
     gUnix->SetTimer (0, TimerCallback);
   } else if (mTimerNotifyFunction == NULL) {
     /* Enable Timer.  */
-    gUnix->SetTimer (mTimerPeriod * 10, TimerCallback);
+    gUnix->SetTimer (mTimerPeriodMs, TimerCallback);
   }
   mTimerNotifyFunction = NotifyFunction;\r
 \r
@@ -219,9 +217,9 @@ Returns:
   if (TimerPeriod == 0
       || ((TimerPeriod > TIMER_MINIMUM_VALUE)
          && (TimerPeriod < TIMER_MAXIMUM_VALUE))) {\r
-    mTimerPeriod = TimerPeriod;\r
+    mTimerPeriodMs = DivU64x32 (TimerPeriod + 5000, 10000);\r
 
-    gUnix->SetTimer (TimerPeriod * 10, TimerCallback);
+    gUnix->SetTimer (mTimerPeriodMs, TimerCallback);
   }
 \r
   return EFI_SUCCESS;\r
@@ -261,7 +259,7 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  *TimerPeriod = mTimerPeriod;\r
+  *TimerPeriod = mTimerPeriodMs * 10000;\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -354,5 +352,13 @@ Returns:
     return Status;\r
   }\r
 \r
+  //\r
+  // Start the timer thread at the default timer period\r
+  //\r
+  Status = mTimer.SetTimerPeriod (&mTimer, DEFAULT_TIMER_TICK_DURATION);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+
   return EFI_SUCCESS;\r
 }\r
index 2764d5f6ed1d602d29519b3c242d9e1f85162108..230fead608173e57802d5b33b7b4fe60c303c532 100644 (file)
@@ -34,9 +34,9 @@ Abstract:
 #define TIMER_MAXIMUM_VALUE (0x100000000ULL - 1)\r
 \r
 //\r
-// Default timer value in 100 ns units (10 ms)\r
+// Default timer value in 100 ns units (50 ms)\r
 //\r
-#define DEFAULT_TIMER_TICK_DURATION 100000\r
+#define DEFAULT_TIMER_TICK_DURATION 500000\r
 \r
 //\r
 // Function Prototypes\r