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 ModelSCI_INT_VECTOR,     //System Vector of SCI interruptSMI_CMD_IO_PORT,    //Port Address of SMI command portACPI_ENABLE,        //Value to write to port SMI_CMD to enable ACPIACPI_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

ACPI知识学习笔记相关推荐

  1. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  2. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

  3. Python基础知识学习笔记——Matplotlib绘图

    Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...

  4. python基础知识学习笔记(2)

    python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...

  5. python基础知识学习笔记(1)

    python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...

  6. oracle数据库基础知识总结,oracle数据库基础知识学习笔记

    oracle数据库基础知识学习笔记 一.oracle数据库类型: Char:  字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...

  7. Python基础知识学习笔记(一)

    Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...

  8. opencv-python基础知识学习笔记

    opencv-python基础知识学习笔记 原博地址:https://www.cnblogs.com/silence-cho/p/10926248.html 目录: opencv-python基础知识 ...

  9. 图像基础知识学习笔记

    图像基础知识学习笔记 文章目录 图像基础知识学习笔记 前言 一.图像基础知识相关笔记 1.光学系统影响图像的结构主要包括什么? 2.常见噪声都有什么,其分类,及特点? 3.光圈,快门,景深? 4. I ...

最新文章

  1. Java设计模式:设计模式基础知识和原则
  2. 2017《面向对象程序设计》作业四
  3. 手动写sonar plugin 一直File is not a plugin.
  4. Arduino 各种模块篇 DHT11 温度湿度 数字模块 单总线
  5. Redis与MySQL的双剑合璧,一文读懂redis
  6. EJB3.0学习笔记---JBOSS 7.1.1 Final版本安装与配置
  7. 三.Python函数
  8. python 新建一列_python – 如何在迭代pandas数据框时创建新列并插入行值
  9. centos7 go yum 安装_Centos7.6从头开始安装nvidiadocker
  10. 双控是指控制理论与控制工程,是二级学科,控制科学与工程是一级学科。
  11. XP重装后磁盘拒绝访问和无法访问加密文件夹
  12. 运动神经元病是怎么回事?
  13. 手机云台——灵眸Osmo Mobile 2
  14. OSGearth学习(一)
  15. OOM以及垃圾收集器
  16. 苹果签名市场变天,频繁封杀到底是什么原因?
  17. [梆梆安全]游戏广告条被篡改原理和APK加固保护方法
  18. 不要以抄底的心态去投资
  19. CentOS 7 64bit下安装并初始化mysql 5.7 完整过程
  20. 医学图像领域,是时候用视觉Transformer替代CNN了吗?

热门文章

  1. python3.4 pip安装_python3.4的pycurl pip安装
  2. visio调整形状位置_VISIO绘图技巧—三相桥式全控整流电路绘制
  3. spring boot2.x设置session有效时间_Spring 源码解析 Scopes 之 Request 、Session 、Application...
  4. python数据结构-栈和队列的实现
  5. 百度指数可视化_可视化指数
  6. 你不知道的 Node.js 工具函数
  7. 每次新增页面复制粘贴?100多行源码的 element-ui 的新增组件功能教你解愁
  8. Ubuntu 16.04使用timedatectl进行管理时间(UTC/CST)(服务器/桌面)
  9. 电信运营商x86服务器定制策略
  10. lnmp_auto:自动化安装lnmp环境脚本