EC修炼之道—ECSCI


         ECSCI是EC上的一个请求系统中断的PIN。电池信息的上报,温度上报,LID状态上报,亮度调节请求以及切屏等功能都需要此中断来通知操作系统执行。既然是中断,就必须有中断号,ECSCI和其它一些DEVICE共用一个SCI中断号,由BIOS来指定,并通过ACPI报给操作系统。

 

1 SCI中断

在了解ECSCI之前,我们先了解一下整个SCI中断的知识。要不然,会造成一叶障目,不见泰山。

         SCI的全称是SystemControl Interrupt,它是操作系统下的一个中断,需要ACPI驱动的支持。很多刚接触主板开发的工程师经常弄不清它和SMI的区别。其实只要记准一条,SCI只在支持ACPI的OS下起作用(DOS系统就不支持)。SMI对OS来讲是透明的,不管OS在与不在,只要BIOS跑完,它都起作用。

        

那么除了ECSCI外,还有哪些可以产生SCI呢?可以翻阅一下INTEL南桥数据手册,在PowerManagement register有两个寄存器,分别是PM1_EN和GPE0_EN。看来产生SCI的中断的设备还真不少,但ECBIOS工程师重点关注的只有ECSCI只一个。

 

ECSCI和其它设备共亨一个中断,如果ECSCI中断产生,操作系统怎么知道是EC请求的,而不是其它设备请求的呢?首先,BIOS宣告的DEVICE EC中会将EC所连接的SGPIO报给操作系统。操作系统收到SCI中断后,会读FADT表中的GPE0_BLK和GPE1_BLK,然后将置1的位和EC DEVICE的GPE进行比较,如果相同就会通过0x84命令读取EC请求的QEVENT号。

 

有EC驱动的Linux操作系统下,EC驱动注册中断函数时,首先会解析AML获得EC Device的GPE,然后将其作为其中一个参数共同赋给GPE Block的event_info[]数组的一个元素。

acpi_install_gpe_handler(NULL,ec->gpe,

                                       ACPI_GPE_EDGE_TRIGGERED,

                                       &acpi_ec_gpe_handler, ec);

        

2 SCI信号

EC修炼之道—ECSCI_第1张图片

这是我在一家EC芯片DataSheet里截的,不知道违规不?如果违规,我先声明我光脚的,没啥钱(^_^)。

         由图可以看出,SCI信号是一个至少要大于5ns的低脉冲。一般设置的值都是20ns左右,足以保证时间了。尽信书不如无书,此图上面的OBF那个图直接忽略掉吧。我原先的一个公司的同事可能就因为相信了这点,写的代码把ACPI驱动拖得老慢,还把WINDOWS搞得一大堆Warning。我后来接手的时候又费劲重写了这部分代码,才把功能调正常。

 

3 EC Status寄存器

EC修炼之道—ECSCI_第2张图片

其中SCI_EVT是代表EC查询事件的标志,当EC用SCI通知OS有Event发生后,操作系统会读取QEVENT号,读之前会先CHECK这个标志位。

 

4  ECSCI触发时机

EC修炼之道—ECSCI_第3张图片

         除了以上这些触发时机外,EC用SCI通知操作系统有事件发生时,也会产生SCI中断,并且会置SCI_EVT标志位。当操作系统成功使用0x84命令读取QEVENT号时,除了产生SCI中断,也会清除SCI_EVT标志位。


你可能感兴趣的:(EC)