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