ACPI里的EC(二)

591 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

简介

紧接上文继续。

一、EC的寄存器

嵌入式控制器数据,EC_DATA (R/W)

这是一个读/写寄存器,允许向EC发出额外的命令字节,并允许OSPM读取由嵌入式控制器返回的数据。主机对该端口的写操作被锁在输入端。

主机对这个端口的写入被锁在输入数据寄存器中,输入缓冲区满的标志被设置在状态寄存器中。从这个寄存器中读出的数据从输出数据寄存器中返回,并清除状态寄存器中的输出缓冲区满标志。

二、EC命令集

EC命令集允许OSPM与EC进行通信。ACPI定义了与EC一起使用的命令和它们的字节编码,见下表。下表显示了这些命令及其字节编码。

命令字节编码
RD_EC0x80
WR_EC0x81
BE_EC0x82
BD_EC0x83
QR_EC0x84

读取嵌入式控制器, RD_EC (0x80)

这个命令字节允许OSPM在EC的地址空间中读取一个字节。

这个命令字节被保留给OSPM专用,它指示EC产生SCI以响应相关的事务(即EC状态寄存器中的IBF=0或OBF=1),而不是SMI。这个命令由一个命令字节组成,写入到

EC命令寄存器(EC_SC),然后是一个写到EC数据寄存器(EC_D)的地址字节。EC数据寄存器(EC_DATA)。然后,EC在寻址位置返回字节,在OBF标志被设置后,数据在数据端口被读取。

写入嵌入式控制器, WR_EC (0x81)

这个命令字节允许OSPM在EC的地址空间写一个字节。

这个命令字节被保留给OSPM专用,它指示EC在响应SCI的时候产生SCI。它指示EC产生SCI以响应相关的事务(即EC状态寄存器中的IBF=0或OBF=1),而不是SMI。

状态寄存器中的IBF=0或OBF=1),而不是SMI。该命令允许OSPM在EC的地址空间写入一个字节。它包括一个写到EC令寄存器(EC_SC)的命令字节,然后是一个写到EC数据寄存器(EC_DATA)的地址字节,接着是一个写到EC数据寄存器的数据字节,寄存器(EC_DATA);这是在寻址位置写入的数据字节。

三、示例

void OEM_ACPI_Cmd_81(void)

{
    if(IS_MASK_SET(SYS_MISC1,ACPI_OS))  // ACPI mode
    {
        if(IS_MASK_CLEAR(PM1STS,BURST)) // Non-burst mode
        {
            ECCheckBurstMode = 1;
        }
  	}
}

四、完结

未完待续。