// Internal data\r
//\r
\r
-STATIC LIST_ENTRY mEfiTimerList = INITIALIZE_LIST_HEAD_VARIABLE (mEfiTimerList);\r
-STATIC EFI_LOCK mEfiTimerLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL - 1);\r
-STATIC EFI_EVENT mEfiCheckTimerEvent;\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
-STATIC EFI_LOCK mEfiSystemTimeLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
-STATIC UINT64 mEfiSystemTime = 0;\r
+EFI_LOCK mEfiSystemTimeLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
+UINT64 mEfiSystemTime = 0;\r
\r
//\r
// Timer functions\r
//\r
-\r
-\r
/**\r
Initializes timer support.\r
\r
EFI_STATUS Status;\r
\r
Status = CoreCreateEvent (\r
- EVT_NOTIFY_SIGNAL,\r
- TPL_HIGH_LEVEL - 1,\r
- CoreCheckTimers,\r
- NULL,\r
- &mEfiCheckTimerEvent\r
- );\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_HIGH_LEVEL - 1,\r
+ CoreCheckTimers,\r
+ NULL,\r
+ &mEfiCheckTimerEvent\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
CoreAcquireLock (&mEfiSystemTimeLock);\r
SystemTime = mEfiSystemTime;\r
CoreReleaseLock (&mEfiSystemTimeLock);\r
+ \r
return SystemTime;\r
}\r
\r
//\r
// Check runtiem flag in case there are ticks while exiting boot services\r
//\r
-\r
CoreAcquireLock (&mEfiSystemTimeLock);\r
\r
//\r
// Update the system time\r
//\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
-\r
if (!IsListEmpty (&mEfiTimerList)) {\r
Event = CR (mEfiTimerList.ForwardLink, IEVENT, u.Timer.Link, EVENT_SIGNATURE);\r
\r
//\r
// Check the timer database for expired timers\r
//\r
-\r
CoreAcquireLock (&mEfiTimerLock);\r
SystemTime = CoreCurrentSystemTime ();\r
\r
//\r
// If this timer is not expired, then we're done\r
//\r
-\r
if (Event->u.Timer.TriggerTime > SystemTime) {\r
break;\r
}\r
// If this is a periodic timer, set it\r
//\r
if (Event->u.Timer.Period) {\r
-\r
//\r
// Compute the timers new trigger time\r
//\r
-\r
Event->u.Timer.TriggerTime = Event->u.Timer.TriggerTime + Event->u.Timer.Period;\r
\r
//\r
//\r
// Add the timer\r
//\r
-\r
CoreInsertEventTimer (Event);\r
}\r
}\r
//\r
// Get the timer's trigger time\r
//\r
-\r
TriggerTime = Event->u.Timer.TriggerTime;\r
\r
//\r
// Insert the timer into the timer database in assending sorted order\r
//\r
-\r
for (Link = mEfiTimerList.ForwardLink; Link != &mEfiTimerList; Link = Link->ForwardLink) {\r
Event2 = CR (Link, IEVENT, u.Timer.Link, EVENT_SIGNATURE);\r
\r
\r
\r
\r
-\r
/**\r
Sets the type of timer and the trigger time for a timer event.\r
\r
//\r
// If the timer is queued to the timer database, remove it\r
//\r
-\r
if (Event->u.Timer.Link.ForwardLink != NULL) {\r
RemoveEntryList (&Event->u.Timer.Link);\r
Event->u.Timer.Link.ForwardLink = NULL;\r
}\r
\r
CoreReleaseLock (&mEfiTimerLock);\r
+\r
return EFI_SUCCESS;\r
}\r