EC资料有个很好的CSDN博客推荐去看看:zhao_longwei的专栏

EC固件代码架构:https://blog.csdn.net/zhao_longwei/article/details/51010544

PCI/PCIE MSI#中断:https://blog.csdn.net/pwl999/article/details/78208151

Linux内核推荐:https://blog.csdn.net/pwl999/article/details/78817899#comments

关于SMI、MSI、SCI、INTx各种中断小结:https://blog.csdn.net/huangkangying/article/details/11178425

http://www.aiuxian.com/article/p-1103653.html

推荐博客:我所知道的EC====>KBSMI&KBSCI:http://www.aiuxian.com/article/p-1090092.html

小弟是学硬件的,苦苦修行中,

SCI VS SMI

SCI:System Control Interrupt, 系统控制中断。专门用于ACPI电源管理的一个IRQ,需要OS支持。

SMI:System Management Interrupt, 系统管理中断,使用系统进入SMM的特殊中断。

两者区别:

SMI是CPU级别的,ACPI和非ACPI模式下都可以使用,而SCI是OS级别的,只有在ACPI support的OS中才能见到。比如说DOS下触发的中断肯定不是SCI,但有可能是SMI。

两者联系:

两者可以用于电源管理,但SMI不限于电源管理。

触发过程:

SMI:  (硬件方式)

SMI Pinassert -> CPU SMM mode -> BIOS SMI handler

SMI:(软件方式)

WriteIO(B2h) -> CPU SMM mode->BIOS SMI handler

SCI:

SCI Pinassert->IDT->OS ACPI driver->ASL code(Q Evnent)->?

http://www.aiuxian.com/relative/p-1103656.html

http://bbs.javaee.cc/post/289740_1_1.html

https://www.cnblogs.com/jyaray/p/7127316.html

http://www.chinafix.com/thread-1035371-1-4.html

https://blog.csdn.net/huangkangying/article/details/7918179

中断信号。也可以走LPC。但是有些对时效性有要求的,就走SCI/SMI了。SMI极少用到。主要是SCI比较多。 system management interrupt 系统管理中断 在繁忙中 请求停下来 先处理某个请求 中断有优先权 某个级别比较高的中断

管理信息结构SMI(structure of management information) 
  它是简单网络管理协议(SNMP)的一部分,指定了在 SNMP 的 MIB 中用于定义管理目标的规则。 
SMI: 系统管理中断 System Management Interrupt 

SMI#:System Management Interrupt,系统管理中断
An OS-transparent interrupt generated by interrupt events on legacy systems. By
contrast, on ACPI systems, interrupt events generate an OS-visible interrupt that is
shareable (edge-style interrupts will not work). Hardware platforms that want to
support both legacy operating systems and ACPI systems must support a way of remapping
the interrupt events between SMIs and SCIs when switching between ACPI
and legacy models.

SCI:beyond compare,系统控制中断
A system interrupt used by hardware to notify the OS of ACPI events. The SCI is an
active, low, shareable, level interrupt.

大师说:SCI主要是在进入ACPI后,ACPI用的中断信号。SMI一般在ACPI状态之前使用的用来做后台中断的东西。在ACPI后 ,SMI就自动关闭,切换到SCI的方式。
SMI少量的会在ACPI的状态下还可以正常工作。主要是用来执行 一些超脱操作系统的特殊的代码。
联想当年的被美国禁用的主要原因就是SMI的问题。他的权限超过操作系统。超脱在操作系统之外

总之,功能一切正常,就是不能正常关机的。刷了BIOS换了桥还不好,查查这些吧。

PME:PCI Express Native Power Management Events control
The firmware sets this bit to 1 to grant control over control over PCI Express native power
management event interrupts (PMEs). If firmware allows the OS control of this feature, then
in the context of the _OSC method it must ensure that all PMEs are routed to root port
interrupts as described in the PCI Express Base Specification. Additionally, after control is
transferred to the OS, firmware must not update the PME Status field in the Root Status
register or the PME Interrupt Enable field in the Root Control register. If control of this
feature was requested and denied or was not requested, firmware returns this bit set to 0.

电源管理的中断。因为在休眠状态下,设备的其他中断是关闭的,只能通过这个通知系统来唤醒设备用的。设备休眠了,没有这个信号,系统就不知道什么时候要唤醒他。就一直睡下去了。可能会整个系统都停了。

SCI与SMI的区别与联系

SMI: System Management Interrupt,系统管理中断,进入SMM的方法,包含(但不限于)电源管理功能,对OS透明的;

SMI pin触发后,CPU进入SMM Mode,转去执行BIOS中的SMI Handler。

SMI pin--> CPU SMM Mode --> BIOS routine

SCI: System Control Interrupt,系统控制中断,是ACPI定义的,专用于ACPI电源管理的一个IRQ,需要OS支持的。

SCI pin触发后,CPU去执行某个放在中断描述表(IDT)中的程式,一般都是指向某个驱动程式(ACPI.sys),ACPI driver会通知相关的驱动程式(ACPI EC Driver),然后跟EC BIOS取得一个代码,而这个代码就是ASL code中的Qxx Number,接着OS会去执行相应的ASL Code,一般都是Method(Qxx)。

SCI pin --> OS Acpi Driver --> ASL Code (Q event) --> ? (看BIOS Spec需求)

联系:都可以用于电源管理功能
区别:SMI是CPU级别的,ACPI和非ACPI模式下都可以用;SCI是OS级别的,只有在ACPI模式才可以用。

SCI只能在ACPI的OS下发出来,如果在DOS下能触发的中断,那肯定不是SCI,那可能是SMI。SMI同样可以在OS下发出来。在进入ACPI的OS后,Bios把CPU的控制权交给OS,SMI还是可以发出来的。SMI大部分由硬件来issue,也可以发soft SMI,一般是在port 0B2h下command,然后在SMI Handle中加入对cmd的动作即可。

SCI_INT

FADT的Offset46为SCI_INT field。

它记录了在PIC Mode下,SCI连接到8259的哪个pin(通常都是IRQ9);在APIC Mode下,它记录了SCI interrupt的Global System interrupt number。

如果在PIC Mode下SCI连接到IRQ9,而在APIC Mode下IRQ9连接到INTIN11,则在FADT中SCI_INT为9, MADT中interrupt resource override entry mapping 将IRQ9 mapping到INTIN11。

如何把SCI_INT从IRQ9改成IRQ11?

三个地方要改:

1. SCI IRQ Select(D31:F0:R44h bit[2:0])由000h(IRQ9)改成010h(IRQ11)

2. FADT中SCI_INT 由9改成11

3. MADT中interrupt resource override entry, Source 0x09; GSI:由0x09改成0x0B

SMI#、SCI#信号在OS、BIOS、EC中的中断方式(Linux)的更多相关文章

  1. 18 os/os.path模块中关于文件/目录常用的函数使用方法 (转)

    os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('. ...

  2. os、os.path模块中关于文件、目录常用的函数使用方法

    os模块中关于文件/目录常用的函数使用方法 函数名 使用方法   getcwd()   返回当前工作目录   chdir(path)   改变工作目录   listdir(path='.')   列举 ...

  3. python编程os、os.path 模块中关于文件、目录常用的函数使用方法

    os模块中关于文件/目录常用的函数使用方法   函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名( ...

  4. python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法

    引用自“鱼c工作室”     文件的打开模式和文件对象方法  : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...

  5. Mac OS X中,有三种方式来实现启动项的配置

    Mac OS x 启动项设置 Mac OS X的启动原理: 1,mac固件激活,初始化硬件,加载BootX引导器. 2,BootX加载内核与内核扩展(kext). 3,内核启动launchd进程. 4 ...

  6. VxWorks中的中断应用设计要点

    硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要.文中以VxWorks操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题.由于软硬 ...

  7. 如何在CentOS 5.x 中安装Windows Azure Linux Agent (WALA)

    Qing Liu  Tue, Mar 10 2015 3:06 AM 在今天的这一个章节中,我们主要讨论在CentOs 5.x 中如何安装Windows Azure Linux Agent 2.11 ...

  8. python中pygame模块的Linux下安装过程

    一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...

  9. 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)

    https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...

随机推荐

  1. ACM程序设计选修课——1049: Efface Numbers(贪心)

    1049: Efface Numbers Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 9  Solved: 4 [Submit][Status][W ...

  2. 飞行员配对方案问题(匈牙利算法+sort)

    洛谷传送门 匈牙利算法+sort 没什么好说的. ——代码 #include <cstdio> #include <cstring> #include <algorith ...

  3. redis学习(一)redis简介

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统,是一种NoSql数据库.Redis是一个开源的使用ANS ...

  4. 关于cookie使用的一些问题

    保存cookie后提取出来发现字符串是被编码过的,需要decodeURIComponent进行下解码才可以 设置cookie setCookie(c_name, value, expiredays) ...

  5. watch watch watch the video! I got almost addicted. Oh what a fuck!!!!

    http://v.huya.com/play/574329.html#relate_vid=570467

  6. mybatis传入map参数,map中包含list(输入参数)

    1.xml中配置: <!-- 根据条件查询满足条件的ID集合开始 --> <select id="getQuestionsIdsForExamPaper" res ...

  7. 【Visual Studio】Visual Studio 2015快捷键设置问题 alt+ F8 (转)

    具体修改方法如下: 工具-选项-环境-键盘-应用以下其他键盘映射方案,选择visual C++6, 然后编代码试试,嘿,我的alt+F8回来了(否则是ctrl + k, ctrl + f); 原文转自 ...

  8. python 修饰器 最好的讲解

    Python的修饰器的英文名叫Decorator,修饰器就是对一个已有的模块做一些“修饰工作”,比如在现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能 ...

  9. javascript中实现类似php 的var_dump

    javascript语言中的调试功能少得可怜,如果涉及到第三方返回的对象数据更是使得开发程度加大.想到php中的var_dump,print_r简单好用,极大程序上方便了开发工作,在网上乱找一通,终于 ...

  10. CocoaPods | iOS详细使用说明

    一:介绍 在iOS开发中,经常会使用到第三方库,[CocoaPods](https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 下面就和大家 ...