EC Qevent

其中的数据结构有,这些变量都定义在EC RAM
XBYTE SCI_Event_In_Index; //该变量表示 当前已经入队 SCI_Event_Buffer[]的数据量
XBYTE SCI_Event_Out_Index; //该变量表示 HOST已经读取了 SCI_Event_Buffer[]中的数据量 如果已经入队超过一轮还未来得及读取则会出错
XBYTE SCI_Event_Buffer[]; //要发送给HOST的堆栈

XBYTE PD_SCI_Event_In_Index; //该变量表示 当前已经入队 PD_SCI_Event_Buffer[]的数据量 这些数据量暂时挂起等待压入 SCI_Event_Buffer[]后通知bios
XBYTE PD_SCI_Event_Out_Index; //已经出队 PD_SCI_Event_Buffer[]的数据量 如果已经入队超过一轮还未来得及出队则会出错
XBYTE PD_SCI_Event_Buffer[]; //挂起的数据的队列
XBYTE OEM_ACPI_Gen_Int(); //对void ACPI_Gen_Int(BYTE Qevent)的封装 用于通过espi或者IO发送sci
主要宏

#define EVENT_BUFFER_SIZE 9
#define PENDING_BUFFER 8

#define SCIMode_Normal 0x00 //该模式表示调用ECQEvent函数要发起Qevent时 有pending的则继续pending本次Qevent
//直到在此Qevent之前的Qevent已经发起 无挂起则发起本次Qevent
#define SCIMode_Pending 0x01 //该模式表示本次发送的Qevent 为之前挂起的 还未来得及发送的Qevent
#define SCIMode_Force 0x02 //该模式表示直接发起本次Qevent 而不考虑是否还有正在挂起的Qevent 或者HOST有事件需要EC处理
#define SCIMode_ACPI_SMBus 0x03 //

qevent的发送主要有以下三个函数;
void ECQEvent(BYTE sci_number, BYTE sci_mode); //1:主要检查支不支持ACPI 不支持则return;
//2:如果有的Qevent 正在挂起 挂起本次Qevent 并return;
//3:在非SCIMode_Force模式下如果HOST的数据还没有处理 则先挂起本次Qevent
//4:在无其它情况时直接发起Qevent

void PendingECQEvent(BYTE sci_number); //挂起一个Qevent
void Get_PendingECQEvent(void); //如果有挂起的Qevent 则轮询发起Qevent

当发送了Qevent后等待HOST从66Port发送84command 接收到84command后把SCI_Event_Buffer[] 的数据POP
相关函数
void Hook_66Port(BYTE PM1Cmd) //判断HOST命令类型
void OEM_ACPI_Cmd_84(void) //84命令处理
void SendFromAcpi(BYTE ecdata) //写数据到寄存器
void ACPI_Gen_Int(BYTE Qevent) //发起SCI通知HOST读取数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值