ACPI里的EC

747 阅读2分钟

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

简介

ACPI定义了一个标准的硬件和软件通信接口,在操作系统驱动程序和嵌入式控制器之间。EC之间的标准硬件和软件通信接口。这允许任何操作系统提供一个标准的驱动程序,可以直接与系统中的嵌入式控制器进行通信,从而使系统中的其他驱动程序能够与系统嵌入式控制器进行通信并使用其资源.这反过来又使OEM能够提供平台功能,使操作系统OSPM和应用程序能够利用这些功能。

ACPI还定义了操作系统驱动程序和基于嵌入式控制器的SMB-HC(EC-SMB-HC)之间的标准硬件和软件通信接口。ACPI标准支持一个系统中的多个嵌入式控制器,每个控制器都有自己的资源。每个嵌入式控制器都有一个平面的字节可寻址的I/O空间,目前定义为256字节。在嵌入式控制器中实现的功能有一个事件 "查询 "机制,允许 由嵌入式控制器实现的功能硬件可以获得操作系统驱动程序或ASL/AML代码处理器。

注意:该接口已被指定用于目前市场上最流行的嵌入式控制器,只需要改变嵌入式控制器与主机接口的 "连接 "方式。

一、EC的寄存器

EC的控制状态

该全称是Embedded Controller Status, 记为EC_SC (R)。这是一个只读寄存器,指示EC接口的当前状态。

EC的控制命令

该全称是Embedded Controller Command, 记为EC_SC (W)。这是一个只允许写的寄存器,允许向EC发出命令。对这个端口的写入在输入数据寄存器中被锁定,输入缓冲区满标志在状态寄存器中被设置。对这个位置的写入也会导致状态寄存器中的命令位被设置。这使得EC能够区分命令序列的开始和数据字节的写入操作。

二、端口分配

EC_SC (R)是0x66,EC_SC (W)也是0x66,区别仅在读写的权限。

//----------------------------------------------------------------------------
// The hook function of 66 port command.
//----------------------------------------------------------------------------
void Hook_66Port(BYTE Cmd)
{
    switch(Cmd)
    {
        case 0x80:
        OEM_ACPI_Cmd_80();
        break;

        case 0x81:
        OEM_ACPI_Cmd_81();
        break;
      }
}

二、完结

未完待续。