捕捉EC产生的QEVENT
Qevent就是一个SCI,该信号是从EC的ECSCI pin发出来的。当EC产生一个SCI后,OS是怎么捕捉到的呢?
这在ACPI SPEC中ACPI Embedded Controller Interface 章节有详细的说明。
大致的意思是:
EC端在准备发送SCI的时候,首先会把SCI_EVT这个bit置一,等待Host端发送0x84查询命令。当收到查询命令后,EC才会将QEvent number发送出去。
假如Host要去捕捉这个QEvent要该怎么做呢?
1.使用轮询的方式,不断地读取EC Status port(0x66端口)
2.检查读取值的bit5是否为1,若为一,表示EC有SCI产生,此时需要往EC的command port(0x66)发送0x84查询指令
3.从DATA port(0x62)读取QEvent number的值
代码如下:
//
void Get_Qevent()
{
UINT8 q_event_number = 0;
while(1)
{
/***
EC genetate SCI step:
1.Set SCI_EVT bit to 1
2.Wait 0x84 query command
3.After receiving 0x84, send QEvent.
***/
/* Query 0x66 port if a SCI will be generated */
UINT8 Ec_Sc_Data = IoRead8(EC_C_PORT);
Print(L"0x66 port data = 0x%2X\n\r", Ec_Sc_Data);
/* EC Ready to send SCI */
if(Ec_Sc_Data & EC_S_SCI_EVT)
{
/* Send 0x84 query command */
OemSendCmdToEcOrKbc (EC_C_PORT, EC_C_GET_QEVENT, FALSE);
/* Read QEvent number from 0x62 port */
q_event_number = OemGetDataFromEcOrKbc (EC_C_PORT, FALSE);
break;
}
/* Query time 500ms */
gBS->Stall(500);
}
Print(L"QEvent Number = 0x%2X\n\r", q_event_number);
}
版权声明:
作者:bin
链接:https://ay123.net/mystudy/670/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
海报
捕捉EC产生的QEVENT
Qevent就是一个SCI,该信号是从EC的ECSCI pin发出来的。当EC产生一个SCI后,OS是怎么捕捉到的呢?
这在ACPI SPEC中ACPI Embedded Controller Interface 章节有……

共有 0 条评论