UEFI Dxe foundation--event

本文深入探讨了EFI Event的相关概念,包括Event Queue、TPL等级、Event的创建与信号处理。核心函数CoreCreateEvent、CoreSignalEvent和CoreDispatchEventNotifies的工作流程被详细解析。此外,还介绍了Timer事件的处理,如CoreCheckTimers、CoreTimerTick以及如何响应硬件中断。通过实例分析,加深了对EFI Event机制的理解。
今天又回头看了UEFI中关于Event的部分代码,每次都是看了忘,忘了看,所以决定写下来,虽然简单,但是也需要一遍遍的加深记忆。。。

 

gEventQueue [Index]   TPL分4个等级:Application=4    callback=8    Notify=16    High_level=31
                                      Index为0~31
                                      每个Entry为Event->NotifyLink
gEventSignalQueue 每个Entry为 IEvent->SignalLink
mEventTable :由Event type构成的数组
gEventQueueLock (TPL_HIGH_LEVEL)
gEventPending
1. CoreCreateEvent CoreCreateEventEx CoreCreateEventInternal
2. CoreSignalEvent :根据Event的TPL将其insert到 gEventQueue [TPL]列表中,通过Event->NotifyLink链接起来,设置 gEventPending 对应的bit
3. CoreDispatchEventNotifies :根据参数TPL,remove  gEventQueue [TPL]链表的entry,执行Event->NotifyFunction,清 gEventPending 对应bit
        CoreRestoreTpl 会执行 CoreDispatchEventNotifies
4. timer event
    4.1常用数据结构
       mEfiTimerLock (TPL_HIGH_LEVEL - 1) mEfiSystemTimeLock (TPL_HIGH_LEVEL)
       mEfiTimerList :其entry为Event->Timer.Link
    4.2 func()
  • 初始化的时候创建名为mEfiCheckTimerEvent的event,其type=signal,NotifyFunction=CoreCheckTimers,TPL=TPL_HIGH_LEVEL - 1
    • CoreCheckTimers\CoreTimerTick\CoreSetTimer中当triggertime到达的话会调用CoreSignalEvent (mEfiCheckTimerEvent)
  • CoreCheckTimers:查看mEfiTimerList中的每个Entry,若Event的TriggerTime到了则调用CoreSignalEvent;周期性的event则重新insert到mEfiTimerList
  • CoreSetTimer:通过调用CoreInsertEventTimer将event加入到mEfiTimerList
  • CoreTimerTick:遍历mEfiTimerList中的每个Entry,若Event的TriggerTime到了则调用CoreSignalEvent
    • TimerInterruptHandler 为8254Time的中断处理函数,当Timer中断发生时,TPL会升级为TPL_HIGH_LEVEL,此时会禁止硬件中断,进而调用mTimerNotifyFunction;而mTimerNotifyFunction正是CoreTimerTick
看了@ Pedroa 的这篇博文 https://pedroa.blog.csdn.net/article/details/82258598,对于event的理解更为深刻,谢谢大神~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值