首页 > 编程知识 正文

慧荣smi量产,tonbo biosciences

时间:2023-05-05 03:52:57 阅读:134684 作者:1629

SCI SMI中断分析SCISMISMMSCI与SMI异同特殊GPE: Q eventSMI几种常见注册触发SWSMI的常见SMI应用

中断

中断:是指根据需要,CPU暂时停止当前程序执行,用于处理新状况的程序和执行处理.

分析中断示例例如,在看书,朋友说今天一起去买东西,用两种方法处理: 1。 你在问什么时候去吗? 2 .继续看书,等他找你。 第一种方式称为查询机制,第二种方式称为中断。 你的朋友是中断源,去购物是中断过程

中断程序-当CPU响应中断时,中断控制器向CPU提供中断类型代码,CPU转移到相应的中断处理程序并处理该事件

.中断的好处不浪费CPU资源如果采用:查询机制,在CPU运行主程序时,必须始终有资源来询问是否需要运行其他程序。 这会浪费CPU资源。

没有插队就做不到。 如果多个设备可以同时工作的:设备需要处理程序,则可以发出中断。 响应时间快的:具有实时处理能力,

能够及时反应系统中各参数的状态。

IRQ/SCI/SMI…IRQ参考https://blog.csdn.net/vito_帅气之火/article/details/52986011 sci sci的全名是system control intinte 硬件用于将ACPI事件通知操作系统系统中断。 例如, L Event、E Event、Q event.SCI需要硬件支持,中断源为:GPIO/smbio等硬件。所有的EC触发器都是Q EventSCI的软件环境为acpi SMI SMI的全名是http://www。 Sina.com/SMI是不可屏蔽的外部中断。 优先级高于所有调试中断、NMI、可屏蔽中断和软中断。 启动SMI时,处理器将进入SMM mode.SMI的中断处理程序。 BIOS C运行时环境为SMM。 在处理器进入SMM模式后,下一个触发的SMI将被锁存。 首先放入内存,处理当前的SMI。 在退出SMM之前不会执行。 SMM SMM的全称是SCI只能在ACPI OS下才能被触发.SMM是一种特殊的CPU模式,主要是硬件控制,这种模式有单独的内存空间SMRAM,占用实际的内存且没有映射。 SMM的权限最高,几乎可以访问所有的存储器和IO资源,没有地址映射,可以访问作为线性地址的物理地址。 进入SMM模式的方法是SMI.SMRAM是一种特殊的内存空间,只能通过SMM访问,在正常模式下无法访问。 在CPU上以SMM模式退出SMM时,会在硬件映射中隐藏。 启动SMI后,CPU进入SMM模式,CPU将当前任务的信息,例如寄存器等保存在SMRAM中,结束SMM时,恢复SMM dispatcher、SMM protocol、变量、代码等所有数据,进行SSM

System Management Interrupt.

SMMIPL在DXE Driver中提供用于进入SMM模式的环境,进行空间分配,预加载函数,等待SMI信号。 SCI和SMI的区别:

都是系统停止了。 BIOS需要协作。 一切都可以用硬件触发。 不同点:

从中断优先级来看, SMI的优先级高于SCI。 从触发条件看: SCI需要硬件配合; 一些SMI可以简单地用IO来触发。 从运行环境看, SCI需要依赖于ACPI OS操作系统; SMI可以在ACPI模式和非ACPI模式中使用,且还可以在开机自检期间执行。 从OS水平来看,不知道是否会生成并执行SMI。 SCI需要操作系统的支持和参与。 从BIOS代码来看, SCI用ASL实现中断程序。 SMI用c语言实现中断程序。 从执行内存来看,可以看到: SCI的区域; SMI运行内存SMRAM,运行完成并退出后,将无法访问此内存。 SCI的中断处理程序:_lxx/_exx(level,edge ) )。

在SCI中,有两种触发方式:的边缘触发和电平触发后进入中断处理程序_LXX/_EXX触发器的事件,通常GPEXX代表GPE中的第几个事件。 例如,_L04表示级别触发方案的第四个GPE事件,每个GPIO XX对应的数值明确地定义于spec中(固定的Method (() ) ) 65 GPE.L04 ()/gp E4 le4 2 ) }第4号支持什么样的硬件动作,从GPE寄存器来看,在FADT中有定义(和EXX一样特殊的GPE3360Qeeer )

法是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描述 ////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_STATUSBootSmmEntry( 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_STATUSEFIAPIBootSmicallback ( 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章

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。