Andrew,
Yes, and there is an interaction between signals and threads. When we
create and event and provide the callback, I am suggesting that this is
like a thread. When the event is signaled for whatever reason, this is like
a signal for that thread.
But I asked the question because I realize I could be confused here, so
maybe you can help me see how UEFI Events are not fundamentally threadlike.
I noticed also that some of our software is making this more explicit.
gEfiDpcProtocolGuid is used heavily in the network code.
But I don't understand why they needed to create this? Why not just use
events directly? Is it the FIFO enforcement, and if so why wouldn't a
normal TPL queue provide that.
Seems like the whole thing is just a wrapper for the TPL queues...so why
did we need that wrapper.
And from this point is where I have my question.
Why are our Events looked at so differently from threads.
I know it would be possible to make a library to provide thread services on
top of Events.
But maybe that is the answer to my question...but I would like to hear what
you think.
-chip
On Thu, May 16, 2013 at 11:39 AM, Andrew Fish <af...@apple.com> wrote:
>
> On May 16, 2013, at 11:29 AM, Chip Ueltschey <chipj...@gmail.com> wrote:
>
> Andrew,
>
> Can't we think of UEFI as being preemptive and threaded; the event
> handlers are like threads. Certainly we are missing some infrastructure for
> thread-like constructs, but I am just curious about what you mean when you
> say "signal based and not threaded."
>
>
> Chip,
>
> I came to the realization as some point that EFI Events are conceptually
> like Unix signals in our single threaded world.
> http://en.wikipedia.org/wiki/Unix_signal
>
> If you look at something like POSIX threads and signals are separate
> concepts. So EFI events implement a single threaded preemptive signal
> model. Basically signals can preempt, but there is only a single main
> thread. In EFI you can only have the main thread or a signaled event
> running.
>
> Thanks,
>
> Andrew Fish.
>
> -chip
>
>
> On Thu, May 16, 2013 at 11:08 AM, Andrew Fish <af...@apple.com> wrote:
>
>>
>>
>> On May 16, 2013, at 10:50 AM, Tim Lewis <tim.le...@insyde.com> wrote:
>>
>> > 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 you are correct. The CoreTimerTick() function in the DXE gets called
>> at the default period set by the Timer Architectural Protocol. The
>> CoreTimerTick() checks the internal queues and decides if an EFI based
>> timer event needs to be signaled. The timer tick starts when the Timer
>> Architectural protocol driver is loaded, and the code I pointed to was an
>> event handler for the installation of architectural protocols by a driver
>> in the DXE Core. By definition all the PI architectural protocol drivers
>> must be loaded prior to running any EFI driver/application since they are
>> needed to make all the EFI services work. This is why no dependency
>> expression in a drivers INF file means depend on all architectural
>> protocols and does not imply a depex of TRUE.
>>
>> Given drivers like USB and networking always use the timer tick, even if
>> an optimization was made to "adjust the period" based on need ticks would
>> still be happening.
>>
>> Since EFI is signal based and not threaded, you are either in the main
>> thread (running a driver or applications entry point) or a signaled event.
>> Thus if you are in the CoreTimerTick() and no event is called that time
>> conceptually is waisted (you could have been doing work on the main
>> thread). I guess some one could profile how much time in the boot is spent
>> in a CoreTimerTick() where no work is done and that is the best case how
>> much boot time your could get back from reprogramming the timer tick to the
>> next needed value. There will be some amount of book keeping required to
>> calculate these values to program into the timer.
>>
>> Thanks,
>>
>> Andrew Fish
>>
>> > 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
>>
>>
>>
>> ------------------------------------------------------------------------------
>> 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
>
>
------------------------------------------------------------------------------
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