SCI SMI
中断
中断: 指当出现需要时, CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程.即在程序运行过程中, 系统出现了一个必须由CPU立即处理的情况, 此时, CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断.
中断分析
中断举例–比如你正在看书, 你的朋友跟你说他今天要找你一起去买东西, 有两种方式处理: 1. 你一直问他, 什么时候去? 2. 你继续看书, 等他找你. 第一种方式叫查询机制, 第二种方式就叫中断. 你朋友就是中断源, 找你去买东西就是中断程序
-
中断程序–当CPU响应中断时(发出中断响应信号), 中断控制器向CPU提供中断类型码, CPU就转入对应的中断处理程序, 处理该事件
.中断的优势 -
不浪费CPU资源: 当采用查询机制时, 需要CPU在跑主程序时保持一直有资源去询问, 是否需要跑其他程序.这样会造成CPU资源浪费,
采用中断则不会. 多个设备可以同时工作: 一旦有设备需要处理程序就可以发出中断. 响应时间快: 具有实时处理能力,
对系统中各个参数状态能及时做出反应.
BIOS中的中断 - 常见的中断如IRQ/SCI/SMI…
-
IRQ 参考
https://blog.csdn.net/vito_bin/article/details/52986011
SCI
- SCI的全称是System Control Interrupt.硬件用来将ACPI事件通知操作系统的一种系统中断. 如: L Event, E Event, Q event.
- SCI需要硬件支持, 中断源是硬件, 如: GPIO/SMBUS/EC. GPIO触发L ,E Event;EC触发的全部都是Q Event
-
SCI的软件环境是要ACPIOS,
SCI只能在ACPI OS下才能被触发
. - 触发SCI中断后, OSPM会调用ASL method (中断处理程序).
SMI
-
SMI的全称是
System Management Interrupt.
- SMI是不可屏蔽外部中断.优先级高于所有调试中断、NMI、可屏蔽中断和软中断.
- 触发SMI后, 处理器就会进入SMM mode.
- SMI的中断处理程序是BIOS C代码, 执行环境是SMM.
- 处理器进入SMM mode后, 再触发的下一个SMI会被锁存(先放在内存中,处理当前的SMI), 直到退出SMM后才会被执行.
SMM
-
SMM的全称是
System Management Mode
. - SMM是一种特殊的CPU模式,主要用与硬件控制和一些OEM代码的执行,该模式有一块单独的内存空间SMRAM,占用实际内存,非映射.
- SMM权限最高, 能访问几乎所有memory和IO资源, 无地址映射, 线性地址即物理地址.
- 进入SMM mode的方式就是触发SMI.
- SMRAM是一段特殊内存空间, 只能在SMM中被访问, 正常模式不能访问.是给CPU在SMM模式下用的, 退出SMM之后就会通过硬件映射被隐藏.
- 触发SMI之后, CPU进入SMM模式,CPU会把当前的任务的信息例如寄存器等保存在SMRAM中, 等退出SMM时候再恢复
- SMRAM里面有SMM dispatcher, SMM protocol, 变量, 代码等所有数据
-
唯一退出SMM的方式是执行RSM指令, 且RSM只能在SMM中被执行.
SMM体系结构
SMMIPL是一个DXE Driver,为进SMM模式提供环境,进行空间分配,函数预载入,等待SMI信号。
SCI和SMI的异同
相同点:
- 都是系统中断.
- 都需要BIOS进行配合.
- 都可以通过硬件方式触发.
不同点:
- 从中断优先级上看: SMI优先级要高于SCI.
- 从触发条件上看: SCI需要硬件配合; 而部分SMI可以单纯由IO来触发.
- 从运行环境上看: SCI需要依赖ACPI OS; SMI在ACPI和非ACPI模式下都可以用, 也可以在POST过程中运行.
- 从操作系统层面看: 操作系统不知道SMI是否产生和执行. SCI是需要操作系统支持和参与.
- 从BIOS代码来看: SCI用ASL实现中断程序; SMI用C语言实现中断程序.
- 从运行内存来看: SCI的区域是可见的; SMI运行内存SMRAM, 运行完成退出之后, 这段内存不能被访问.
SCI的中断处理程序: _LXX/_EXX (level 、edge)
- SCI有两种触发方式: 边沿触发和电平触发
- 触发之后进入中断处理程序_LXX/_EXX
- 触发的事件一般叫做GPE
- XX代表着GPE中的第几个事件, 比如_L04代表电平触发方式的第4号GPE事件,每一个GPIO XX对应的数值在spec中都有明确规定,固定的
Method (\GPE.L04){ // GPE 4 level wake hamdler
Notify (\_SB.PCIO.COM0,2)
}
- 第4号对应着什么硬件行为, 要看GPE寄存器, 在FADT中有定义
- _EXX同理
特殊的GPE: Q event
Q event也是GPE的一种, _Qxx方法是ASL中的名字, 由EC和SMBus产生.
-
对于笔记本而言用的最多的Q event是由EC触发的. 当Q event触发时, EC会把Q event号传给操作系统下的EC driver.
Q event与L/E event的差异 -
- L/E event触发只需要硬件触发, 只需要GPIO触发,对应的GPIO号,就能找到对应的number号xx.
-
- Q event需要软件告知OS, 才能触发对应的Q event number号xx.
-
-
一根硬件GPIO pin只能产生一个L/E event, 但是可以产生很多Q event.
当EC触发时,指定的事件会由method描述
-
一根硬件GPIO pin只能产生一个L/E event, 但是可以产生很多Q event.
//
//TP disable
//EC触发Q event的时候, 指定是第3F号事件
Method (_Q3F,0,NotSerialized)
{
Store(0x3F,P80H)
Notify(\_SB.T2CD.TPD0,0x3F)
}
SMI的几种常见的注册
常见SMI如: SW SMI / Sleep SMI / Power Button SMI / GPIO SMI.
- 以下只介绍SW SMI的例子(向B2或B0写值就能触发的SMI)
- SW SMI注册, 如下注册一个ACPI enable SW SMI:
EFI_STATUS
BootSmmEntry(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
if(!InSmm()){
return EFI_UNSUPPORTED;
}
//Register Software SMI
{
EFI_SMM_SW_DISPATCH2_PROTOCOL *SwDispatch;
EFI_SMM_SW_REGISTER_CONTEXT SwContext;
EFI_HANDLE SwHandle;
EFI_STATUS Status;
//在写Driver的时候,通过gEfiSmmSwDispatch2ProtocolGuid注册该SMI,
Status = gSmst->SmmLocateProtocol (
&gEfiSmmSwDispatch2ProtocolGuid,
NULL,
&SwDispatch
);
ASSERT_EFI_ERROR (Status);
//BOOT_SEQUENCE_UPDATE_SWSMI这个号码必须是惟一的,通过SwDispatch 建立与函数实体的链接
SwContext.SwSmiInputValue = BOOT_SEQUENCE_UPDATE_SWSMI;
Status = SwDispatch->Register (
SwDispatch,
BootSmiCallback,
&SwContext,
&SwHandle
);
ASSERT_EFI_ERROR (Status);
}
}
//函数实体
EFI_STATUS
EFIAPI
BootSmicallback (
IN EFI_HANDLE DispatchHandle,
IN CONST VOID *Context OPTIONAL,
IN OUT VOID *CommBuffer OPTIONAL,
IN OUT UINTN *CommBufferSize OPTIONAL
)
......
SWSMI的触发
RW手动触发SWSMI demo
- 首先要查看机器上的SW SMI port, 一般来说Intel为0xB2, AMD为0xB0. 以Intel机器为例
- 第一步: 开机进OS, 打开RW
- 第二步: 打开IO Space, 在IO Space Base中敲入0xB2
-
第三步: 在offset 0x00的位置写入BOOT_SEQUENCE_UPDATE_SWSMI并回车, 则最终会执行到BootSmiCallback函数里面去
常见SMI的应用
SW SMI 应用: OS下修改BIOS Setup variable.
- Sleep SMI 应用: 系统下S3/S4/S5命令后被调用, 如AMDCRB在此SMI操作LED灯.
- Power button SMI应用: 当power button被按下时调用.
-
GPIO SMI 应用: 利用Novo Button确认到底是否为HW hang.
部分内容及拓展内容可见 ACPI spec V6.2, 4.8章, 4.8.1章, 5.6.4章; PI spec SMM;ACPI spec V6.2, 12章
版权声明:本文为weixin_45279063原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。