Stephen --

No, on most UEFI implementations timer is running and, in the shell, 
polling-related events are happening all the time (to check for input-related 
device status change)

Could the DXE core do on-demand only? Probably, but that is not the current 
EDK2 implementation, as far as I understand it.

Tim

-----Original Message-----
From: Stephen Polkowski [mailto:step...@centtech.com] 
Sent: Thursday, May 16, 2013 10:31 AM
To: edk2-devel@lists.sourceforge.net
Subject: Re: [edk2] how timer and interrupt works in UEFI?


Hi Andrew,

        Thanks for answering this question.  I was curious about interrupts as 
well.  If I understand you correctly, a timer exists and it is only used when a 
driver or a program requests it.

        So, when we come up in a basic UEFI Shell the system is essentially 
tickless?

Thanks,

Stephen


Andrew Fish wrote:
> 
> On May 16, 2013, at 7:16 AM, "zzhh.happy" <zzhh.ha...@163.com 
> <mailto:zzhh.ha...@163.com>> wrote:
> 
>> Hi all,
>>  
>> I'm fresh man for studying UEFI,and there are some questions ,is 
>> there anyone can help,thanks!
>> as we know there is only on interrupt that is the timer,it works as 
>> the  heartbeat timer.but in X86 platform i can't find the timer 
>> interrupt handle function. except bellow service *CoreTimerTick,*but 
>> there is a input parameter *Duration,*never heard that interrupt 
>> service have input parameter,if yes, who pass it in?
>> and there are my question:
>>  
> UEFI does not define how the timer works, just that it exists. The 
> UEFI Platform Initialization Specification 1.2.1 
> <http://www.uefi.org/specs/platform_agreement>  (also called PI spec) 
> defines how the timer works in the edk2 http://www.uefi.org/specs/.
> 
> The PI defines a set of Architectural Protocol that produce the 
> hardware services needed to produce the EFI services. If you look in 
> https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdeModulePkg/
> Core/Dxe/DxeMain/DxeProtocolNotify.c
> you will see the mArchProtocols array that contains a list of these 
> architectural protocols, and some globals that filled in when the 
> protocols are registered.
> 
> So basically the CPU AP, gEfiCpuArchProtocolGuid, abstracts interrupt 
> handling in a processor agnostic way (Same DXE Core source works for 
> Itainum, IA32, X64, and ARM). The Timer AP, gEfiTimerArchProtocolGuid, 
> depends on the CPU AP and produces the timer tick for the platform.
>> 1.in x86 platform what is the heartbeat,is it the leagcy 8254?
> It can be any timer. It is what ever Timer AP driver gets included in 
> the firmware. Search for drivers installing gEfiTimerArchProtocolGuid.
>> 2.what is the interrupt vector number?
> There is not a standard. It is platform specific and set by the driver. 
> Some drivers may offer a PCD config setting to change the vector. 
>> 3.where is the IDT table exist in memery after the timer start 
>> ticking
> The CPU AP driver sets up the IDT. For X64/IA32 the IDT is not at a 
> fixed address. Search for a driver installing gEfiCpuArchProtocolGuid.
> Note: There is an assemble instruction that lets you know the address, 
> but it is probably a very bad idea to patch anything into the table 
> directly as debuggers need to cooperate with the CPU AP to hook 
> vectors, so you may break the debugger or the CPU AP. You can use 
> gEfiCpuArchProtocolGuid services to hook an interrupt vector if that 
> is what you need to do.
> There are C functions that implement common assembly instruction in 
> the BaseLib. So AsmReadIdtr().
>> 4.what is the heartbeat service handle,and how it registered to the 
>> cpu's interrupt verctor table.
> https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdeModulePkg/
> Core/Dxe/DxeMain/DxeProtocolNotify.c
> 
> When the Timer AP service is registered the DXE Core does: 
> 
> gTimer->RegisterHandler (gTimer, CoreTimerTick);
> 
> Which registers the DXE Cores timer callback.
> 
> This is an example gEfiCpuArchProtocolGuid driver: 
> https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/UefiCpuPkg/Cp
> uDxe/ This is not the driver you would find on a real platform as 
> there is a large amount of processor specific initialization that is 
> required, but it shows the general concepts.
> 
> Thanks,
> 
> Andrew Fish
>>  
>> thanks very much.
>>  
>>
>> VOID
>> EFIAPI
>> *CoreTimerTick* (
>>   IN UINT64   Duration
>>   )
>> /*++
>> Routine Description:
>>   Called by the platform code to process a tick.
>> Arguments:  Duration    - The number of 100ns elasped since the last 
>> call to TimerTick    
>> Returns:  None
>> --*/
>> {
>>   IEVENT          *Event;
>>    // Check runtiem flag in case there are ticks while exiting boot 
>> services
>>   CoreAcquireLock (&mEfiSystemTimeLock);
>>   // Update the system time
>>   mEfiSystemTime += Duration;
>>   // If the head of the list is expired, fire the timer event
>>   // to process it
>>   if (!IsListEmpty (&mEfiTimerList)) {
>>     Event = CR (mEfiTimerList.ForwardLink, IEVENT, u.Timer.Link, 
>> EVENT_SIGNATURE);
>>     if (Event->u.Timer.TriggerTime <= mEfiSystemTime) {
>>       CoreSignalEvent (mEfiCheckTimerEvent);
>>     }
>>   }
>>   CoreReleaseLock (&mEfiSystemTimeLock); }
>> 2013-05-16
>> ---------------------------------------------------------------------
>> ---
>> zzhh.happy
>> ---------------------------------------------------------------------
>> --------- AlienVault Unified Security Management (USM) platform 
>> delivers complete security visibility with the essential security 
>> capabilities. Easily and efficiently configure, manage, and operate 
>> all of your security controls from a single console and one unified 
>> framework. Download a free trial.
>> http://p.sf.net/sfu/alienvault_d2d___________________________________
>> ____________
>> edk2-devel mailing list
>> edk2-devel@lists.sourceforge.net 
>> <mailto:edk2-devel@lists.sourceforge.net>
>> https://lists.sourceforge.net/lists/listinfo/edk2-devel
> 
> 
> ----------------------------------------------------------------------
> --
> 
> ----------------------------------------------------------------------
> -------- AlienVault Unified Security Management (USM) platform 
> delivers complete security visibility with the essential security 
> capabilities. Easily and efficiently configure, manage, and operate 
> all of your security controls from a single console and one unified 
> framework. Download a free trial.
> http://p.sf.net/sfu/alienvault_d2d
> 
> 
> ----------------------------------------------------------------------
> --
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel


------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete 
security visibility with the essential security capabilities. Easily and 
efficiently configure, manage, and operate all of your security controls from a 
single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to