EC中QEvent的来龙去脉
前言
QEvent是一种用于EC给OS发通知的机制,比如EC检测到笔记本合上盖了,就会发一个QEvent给OS,OS收到后便会去做关屏的动作;又如EC检测到调节音量的事件(这里考虑EC以发SCI方式处理,键值方式的忽略),EC也会发一个QEvent通知OS,OS再去执行相关音量调节动作。
OS中处理QEvent的方法一般是由包在BIOS中的ASL代码实现的,BIOS完成开机引导后,这一部分代码最终会被放在内存中,供OS调用,而BIOS实际上并不参与此过程。
原理
整个过程有硬件部分也有软件部分,下面分别来看看。
硬件:QEvent实际上是一个SCI信号,当产生一个SCI时,EC的ECSCI Pin有个拉低再拉高的动作,如下图:
软件:这部分是ACPI SPEC定义的(参见12.3.5 Query Embedded Controller, QR_EC (0x84)),可分为几个步骤,下面结合EC代码(ITE)来看看:
1.当EC有QEvent事件要产生时,首先会设置SCI_EVT标志位(0x66 Port寄存器中的一个bit),然后产生一个SCI信号,做完这两个动作后EC等待Host端发一个查询命令(0x84)过来。
2.Host端检测到SCI信号后便检查SCI_EVT此标志是否设置,是的话则发送查询命令(0x84)给EC。
3.EC等到查询命令后将往数据寄存器(0x62)放一个0-255的值。
4.Host端发送完查询命令后等OBF标志满便读取数据寄存器(0x62),得到的值就是QEvent的标号,OS则可根据此标号做相应的处理。
版权声明:
作者:bin
链接:https://ay123.net/mystudy/bios/740/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论