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