Thanks,
and there is a note froem UEFI BWG as bellow.waht dose it mean.
1.is there any other TPL,dosn't documented in the spc
2.what is the firemware exactly is,how the reserved TPL be used?
Note: Only TPL_APPLICATION, TPL_CALLBACK, TPL_NOTIFY, and TPL_HIGH_LEVEL may be
used by UEFI Drivers. All other values are reserved for use by the firmware.
2013-05-18
zzhh.happy
发件人:Andrew Fish <af...@apple.com>
发送时间:2013-05-17 23:56
主题:Re: [edk2]how timer and interrupt works in UEFI?
收件人:"edk2-devel"<edk2-devel@lists.sourceforge.net>
抄送:
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