X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdeModulePkg%2FCore%2FDxe%2FEvent%2FTimer.c;h=6cd4e6c1854bbbbf71c1cf6645ff797027f79644;hb=646127c1929a606a1a5709d78f06f2dd5494b397;hp=e1df72153d68ffdc01e02e4b73d712ce98f29a38;hpb=f94b9be34f10c7afd223aac1426a4e1b4defd7ae;p=mirror_edk2.git diff --git a/MdeModulePkg/Core/Dxe/Event/Timer.c b/MdeModulePkg/Core/Dxe/Event/Timer.c index e1df72153d..6cd4e6c185 100644 --- a/MdeModulePkg/Core/Dxe/Event/Timer.c +++ b/MdeModulePkg/Core/Dxe/Event/Timer.c @@ -1,8 +1,8 @@ /** @file Core Timer Services -Copyright (c) 2006 - 2008, Intel Corporation.
-All rights reserved. This program and the accompanying materials +Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
+This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php @@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "DxeMain.h" +#include "Event.h" // // Internal data @@ -50,20 +51,20 @@ CoreInsertEventTimer ( // // Get the timer's trigger time // - TriggerTime = Event->u.Timer.TriggerTime; + TriggerTime = Event->Timer.TriggerTime; // // Insert the timer into the timer database in assending sorted order // for (Link = mEfiTimerList.ForwardLink; Link != &mEfiTimerList; Link = Link->ForwardLink) { - Event2 = CR (Link, IEVENT, u.Timer.Link, EVENT_SIGNATURE); + Event2 = CR (Link, IEVENT, Timer.Link, EVENT_SIGNATURE); - if (Event2->u.Timer.TriggerTime > TriggerTime) { + if (Event2->Timer.TriggerTime > TriggerTime) { break; } } - InsertTailList (Link, &Event->u.Timer.Link); + InsertTailList (Link, &Event->Timer.Link); } /** @@ -111,12 +112,12 @@ CoreCheckTimers ( SystemTime = CoreCurrentSystemTime (); while (!IsListEmpty (&mEfiTimerList)) { - Event = CR (mEfiTimerList.ForwardLink, IEVENT, u.Timer.Link, EVENT_SIGNATURE); + Event = CR (mEfiTimerList.ForwardLink, IEVENT, Timer.Link, EVENT_SIGNATURE); // // If this timer is not expired, then we're done // - if (Event->u.Timer.TriggerTime > SystemTime) { + if (Event->Timer.TriggerTime > SystemTime) { break; } @@ -124,8 +125,8 @@ CoreCheckTimers ( // Remove this timer from the timer queue // - RemoveEntryList (&Event->u.Timer.Link); - Event->u.Timer.Link.ForwardLink = NULL; + RemoveEntryList (&Event->Timer.Link); + Event->Timer.Link.ForwardLink = NULL; // // Signal it @@ -135,17 +136,17 @@ CoreCheckTimers ( // // If this is a periodic timer, set it // - if (Event->u.Timer.Period) { + if (Event->Timer.Period != 0) { // // Compute the timers new trigger time // - Event->u.Timer.TriggerTime = Event->u.Timer.TriggerTime + Event->u.Timer.Period; + Event->Timer.TriggerTime = Event->Timer.TriggerTime + Event->Timer.Period; // // If that's before now, then reset the timer to start from now // - if (Event->u.Timer.TriggerTime <= SystemTime) { - Event->u.Timer.TriggerTime = SystemTime; + if (Event->Timer.TriggerTime <= SystemTime) { + Event->Timer.TriggerTime = SystemTime; CoreSignalEvent (mEfiCheckTimerEvent); } @@ -171,11 +172,12 @@ CoreInitializeTimer ( { EFI_STATUS Status; - Status = CoreCreateEvent ( + Status = CoreCreateEventInternal ( EVT_NOTIFY_SIGNAL, TPL_HIGH_LEVEL - 1, CoreCheckTimers, NULL, + NULL, &mEfiCheckTimerEvent ); ASSERT_EFI_ERROR (Status); @@ -185,7 +187,7 @@ CoreInitializeTimer ( /** Called by the platform code to process a tick. - @param Duration The number of 100ns elasped since the last call + @param Duration The number of 100ns elapsed since the last call to TimerTick **/ @@ -212,9 +214,9 @@ CoreTimerTick ( // to process it // if (!IsListEmpty (&mEfiTimerList)) { - Event = CR (mEfiTimerList.ForwardLink, IEVENT, u.Timer.Link, EVENT_SIGNATURE); + Event = CR (mEfiTimerList.ForwardLink, IEVENT, Timer.Link, EVENT_SIGNATURE); - if (Event->u.Timer.TriggerTime <= mEfiSystemTime) { + if (Event->Timer.TriggerTime <= mEfiSystemTime) { CoreSignalEvent (mEfiCheckTimerEvent); } } @@ -259,7 +261,7 @@ CoreSetTimer ( return EFI_INVALID_PARAMETER; } - if (Type < 0 || Type > TimerRelative || !(Event->Type & EVT_TIMER)) { + if ((UINT32)Type > TimerRelative || (Event->Type & EVT_TIMER) == 0) { return EFI_INVALID_PARAMETER; } @@ -268,21 +270,24 @@ CoreSetTimer ( // // If the timer is queued to the timer database, remove it // - if (Event->u.Timer.Link.ForwardLink != NULL) { - RemoveEntryList (&Event->u.Timer.Link); - Event->u.Timer.Link.ForwardLink = NULL; + if (Event->Timer.Link.ForwardLink != NULL) { + RemoveEntryList (&Event->Timer.Link); + Event->Timer.Link.ForwardLink = NULL; } - Event->u.Timer.TriggerTime = 0; - Event->u.Timer.Period = 0; + Event->Timer.TriggerTime = 0; + Event->Timer.Period = 0; if (Type != TimerCancel) { if (Type == TimerPeriodic) { - Event->u.Timer.Period = TriggerTime; + if (TriggerTime == 0) { + gTimer->GetTimerPeriod (gTimer, &TriggerTime); + } + Event->Timer.Period = TriggerTime; } - Event->u.Timer.TriggerTime = CoreCurrentSystemTime () + TriggerTime; + Event->Timer.TriggerTime = CoreCurrentSystemTime () + TriggerTime; CoreInsertEventTimer (Event); if (TriggerTime == 0) {