start timer at initialization
authortgingold <tgingold@de2fecce-e211-0410-80a6-f3fac2684e05>
Tue, 13 Feb 2007 02:16:12 +0000 (02:16 +0000)
committertgingold <tgingold@de2fecce-e211-0410-80a6-f3fac2684e05>
Tue, 13 Feb 2007 02:16:12 +0000 (02:16 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@2377 de2fecce-e211-0410-80a6-f3fac2684e05

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

index 8001138..37fdde5 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 2764d5f..230fead 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