ACPI知识学习笔记

ACPI table之FACP(Fixed ACPI Description Table).

在代码里面:Resources\AcpiTables\Fadt\Fadt3.0.act 定义了EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE Fadt.

列举出比较重要且常用的几项:

INT_MODEL,          //System Interrupt Model
SCI_INT_VECTOR, //System Vector of SCI interrupt
SMI_CMD_IO_PORT, //Port Address of SMI command port
ACPI_ENABLE, //Value to write to port SMI_CMD to enable ACPI
ACPI_DISABLE, //Value to write to port SMI_CMD to disable ACPI

这些items会在AcpiPlatform.h中定义:

#define INT_MODEL 0x01
#define SCI_INT_VECTOR 0x0009
#define SMI_CMD_IO_PORT 0x00B0 //For AMD
#define ACPI_ENABLE 0xA0
#define ACPI_DISABLE 0xA1

如果研究ACPI的规范,就会发现,当ACPI_EN起来,系统就会发SCI而不是SMI。那为什么?具体的流程是什么样子的?

  其实,让ACPI ENABLE起来的动作是最后一号SMI来做的。通过向B0 端口下0xA0,就会调用到一个SMI的Callback function,这个函数最后把SCI enable。

接着又有一个问题,SCI的产生,OS是怎么知道的呢?CPU怎么会去执行SCI呢?

  插入一个概念,当一个SMI发出来,CPU上的一个关于SMI的pin会被触发,CPU会进入SMM。而SCI其实是通过配置成APIC,产生IRQ。我的理解是,在上面所述的Callback函数里面,会将SCI对应到IRQ 9。之后SCI INT的信息就被存在ACPI FADT table里面,即定义的SCI_INT_VECTOR。这样OS就可以通过FADT获得SCI所使用的中断号码,这样就能在SCI产生时处理该中断。

这里插入一段我对Qxx的大概理解:

   当AC IN/OUT, LID CLOSE/OPEN, HOTKEY PRESS等事件发生时,KBC/EC会侦测到。随即,它会触发南桥的EC_SCI pin(这边可以解释为什么OS知道这是EC发出的SCI),南桥就会触发一个SCI,OS会收到这个SCI,并且去查询Qxx的number(通过向EC下达84h命令,读取EC RAM某个地方的value,这个value就是number),最后asl code会调用相关的Qxx执行。

转载于:https://www.cnblogs.com/cffx-chu/archive/2011/08/09/2132119.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值