The UEFI Driver Writer's Guide is a good reference: 
http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Driver_Writer's_Guide

We don't have documentation on "how the code works", most of the documentation 
is API oriented. 

Andrew Fish




On May 17, 2013, at 5:48 AM, zzhh.happy <zzhh.ha...@163.com> wrote:

> Andrew,
>  
> Thanks very much for your help.i have found the source code about timer and 
> interrupt.and one more question,is there any document about Event except the 
> UEFI&PI spc,then we can easily for understanding how event works.
>  
> X86 plantfore Files:
>  
> timer.c
> hpettimer.c
> cpuasm.asm
>  
> 2013-05-17
> zzhh.happy
> 发件人:Andrew Fish <af...@apple.com>
> 发送时间:2013-05-17 00:11
> 主题:Re: [edk2]how timer and interrupt works in UEFI?
> 收件人:"edk2-devel"<edk2-devel@lists.sourceforge.net>
> 抄送:
>  
> 
> On May 16, 2013, at 7:16 AM, "zzhh.happy" <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  (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/CpuDxe/
> 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
>> 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