一、什么是Events
Legacy post is Interrupt, EFI post is Event.
Events 是UEFI Service管理的另一个类型的对像。一个Event可以被创建,也可以被销毁:它可以处在Waiting状态,也可以处在Signaled状态。
一个UEFI Image可以对Event做以下的事情:
1). 创建一个Event //CreateEvent()
2). 销毁一个Event //CloseEvent()
3). 查看一个Event是否处在Signaled状态 //CheckEvent()
4). 等待一个Event进入Signaled状态 //WaitForEvent()
5). 请求一个Event从Waiting状态进入到Signaled状态 //SignalEvent()
UEFI不Support Interrupt(UEFI唯一一个中断int 0,timer),除了timer中断,主机不能使用硬件中断和外部设备通信。所以,只能使用polling方式来访问设备。UEFI目前不支持多线程,是单线程环境,但是它必须提供一种异步机制来支持有限多任务,这就是引入EVENT的原因。
UEFI Driver经常使用Timer Events来允许Driver周期性的轮询Device。
二、UEFI Events的类型及相互之间的关系
1. Wait Events
只要这种类型的Event一被检查或被服务,它的notification功能就被执行。
2. Signal Events
当这种类型的Event从Waiting 状态转到Signaled 状态的时候,它的Notification功能就被排队,等待执行。
Signal Events又分为三种类型:
1). Exit Boot Services Events
当UEFI Boot Service ExitBootServices() 被调用的时候,这种类型的Signal Event 才从Waiting 状态转到Signaled 状态,这时它的Notification功能才被排队,等待执行。
这个调用发生在平台的控制权由Firmware交给OS的时候。
2). Set Virtual Address Map Events
当UEFI Runtime Service SetVirtualAddressMap() 被调用的时候,这种类型的Signal Event 才从Waiting 状态转到Signaled 状态,这时它的Notification功能才被排队,等待执行。
这个调用发生在OS请求UEFI的Runtime Component从物理地址模式转向虚拟地址模式的时候。
3). Timer Events
当规定时间到了的时候,这种类型的Signal Event 才从Waiting 状态转到Signaled 状态,这时它的Notification功能才被排队,等待执行。
Timer Events又分为两种:
1>. Periodic Timer Events 周期性的Timer Events
2>. One-shot Timer Events 一次性的Timer Events
三、Events的三要素
1. The Task Priority Level(TPL) of the Event
TPL的目的:
1). 定义一个Notification function执行的优先次序。
2). To create Locks, 确保互斥存取。
2. A Notification function
3. A Notification context
Refer:
Beyond BIOS Second Edition