在V1.0之后的ACPI版本中,该描述符表被XSDT取代。值得注意的是,FADT的识别标识是“FACP”,在ACPI表中,FACP.dat文件存放处理器系统的FADT表。该表是ACPI规范最复杂,同时也是最重要的一个表。图14-3 ACPI表的组成结构ACPI表存放在处理器的主存储器中,当处理器系统初始化时,BIOS将这些表放入特定物理内存,之后系统软件可以访问这些表项。在Linux系统中,可以使用以下方法调试ACPI表。......
2023-10-20
在x86处理器中,ACPI(Advanced Configuration and Power Interface)是一个非常重要而且较为复杂的概念。最初ACPI规范由Intel、Microsoft和Toshiba公司共同制定,后来HP和Phoenix公司也参与了ACPI规范的制定,该规范主要包括x86处理器系统的资源配置和电源管理两方面内容。
ACPI规范整合了之前的OSPM(Operating System directed Power Management)、MultiPro-cessor规范和Plug and Play BIOS规范,并定义了一系列数据结构与电源管理状态,提供了电源管理接口、硬件及其Firmware接口,以描述处理器系统的设备和电源管理策略。ACPI规范在1996年12月发布1.0版本,目前的稳定版是4.0版。
ACPI规范是x86处理器使用的Firmware接口标准,操作系统需要获得的处理器底层信息基本上都可以从ACPI表中获得。在ACPI诞生之前,基于x86处理器的操作系统需要使用BIOS才能获得相应的信息。而不同厂商提供的BIOS之间并没有一个统一标准,从而在某种程度上造成硬件资源管理与使用上的混乱。
产生这种混乱的主要原因是由于x86处理器系统为了实现向前兼容,有许多不得已;而部分原因是在x86处理器系统中,有许多外部设备本身就挂接在一些“不可配置的”总线上,如ISA/EISA总线,还有一些外部设备本身就是不标准的,如电源按钮和在笔记本上使用的一些“特殊功能键”。
在ACPI规范没有出现之前,BIOS厂商通常按照某种“自定义”的方式使用这些外部设备,因此需要为操作系统提供各类驱动程序,并由操作系统集成这些并不属于任何标准的驱动程序,从而给操作系统的开发与维护带来了极大的困难。
ACPI机制在这种背景下应运而生。ACPI机制提供了一组与处理器硬件和操作系统的相关接口,对处理器平台以及设备的电源进行管理,并可以配置和管理外部设备使用的系统资源。ACPI机制主要管理以下系统资源。
●Legacy PNP设备[5],如ISA设备、串并口等设备。
●笔记本使用的一些外部设备,如电源开关、风扇、电源和一些快捷键。
●系统电源管理,包括处理器和外部设备的电源管理。这部分内容也是ACPI规范的设计重点。
●系统的热插拔管理。热插拔是ACPI规范的设计重点,ACPI系统热插拔可以覆盖小到“从笔记本插拔CDROM”,大到“NUMA(Non-uniform Memory Access)结构处理器系统热插拔PE(Processor Element)、存储器节点(Memory Node)和I/O节点”这些应用。不过许多NUMA处理器系统并没有使用ACPI规范进行热拔插管理。本节对ACPI的热插拔管理不做深入介绍。
●PCI设备的中断向量分配。在x86处理器平台中,中断向量的分配始终是一个问题。x86处理器由于一些历史遗留问题,中断向量的分配并不尽善尽美,而x86处理器为了实现向前兼容,必须保留这些不完美。本章将在第15.1.1节详细介绍中断向量的分配。
●一些集成在MCH和ICH中的外部设备。x86处理器使用PCI配置空间存放这些外部设备的寄存器,但是这些设备并不都是严格意义上的PCI设备,甚至不是一个外部设备。如在x86处理器中的使用存储器映射寻址的一些寄存器,这些寄存器被存放在某个PCI设备的配置空间中,如TOLUD寄存器存放在Bus号、Device号和Function号都为0的PCI设备中,但是这个PCI设备并不是处理器系统的标准PCI设备。ACPI规范需要管理这类“伪PCI设备”中的寄存器。
目前在x86处理器中,新引入的一些与处理器体系结构相关的特性,基本上都只使用ACPI机制进行描述,而不再使用BIOS。因此为了深入理解x86处理器平台,需要了解一些与ACPI相关的基本知识。ACPI规范所涉及的内容非常广泛,与ACPI规范有关的全部知识可以独立成书,本节仅简要介绍ACPI规范中与PCI总线相关的部分内容。ACPI规范的各部分内容相对较为独立,除了ACPI规范的开发者和从事与此相关的系统程序员之外,绝大多数程序员不需要了解与ACPI规范相关的全部知识。
从系统软件的角度上看,ACPI的组成结构如图14-1所示。从图中可以发现,ACPI用以连接系统硬件平台与操作系统,在屏蔽了硬件的实现细节的同时,提供了一系列系统资源,包括ACPI寄存器(ACPI Registers)、ACPI BIOS和ACPI表(ACPI Tables)。
图14-1 ACPI的组成结构(www.chuimin.cn)
当一个处理器系统使能ACPI机制后,操作系统访问ACPI管理的“非标”外设时,首先通过ACPI机制提供的一套标准API,并由这些API将访问存放在系统内存中的ACPI表,并通过执行ACPI表中的程序读写ACPI寄存器,或者对这些寄存器进行操作。在ACPI表中,除了含有处理器系统的资源信息之外,还包括管理这些资源信息的操作函数,因此BIOS厂商通过ACPI表即可实现一些简单的设备驱动程序。
操作系统使用这些API,并通过ACPI Driver/AML Interpreter访问ACPI提供的系统资源,包括ACPI Registers、ACPI BIOS和ACPI表。ACPI表对于理解ACPI机制较为重要,在第14.2.2节和第14.2.3节将专门介绍该表的组成与实现。
在x86处理器系统中,系统资源由ACPI BIOS维护,操作系统使用ACPI提供的标准API从ACPI BIOS中获得这些资源,而不必关心这些“非标”外设的具体实现方式,因此也不需要使用特定的驱动程序访问这些“非标”外设。
因为这些“非标”外设的管理由ACPI BIOS完成,x86处理器使用ACPI表描述这些“非标”外设,并将这个ACPI表存放到BIOS中。OEM厂商需要在标准PC处理器平台上添加一些“自定义”的功能时,只需改动ACPI表即可,而不需要改动操作系统,从而极大地降低了操作系统的集成与维护难度。
ACPI机制使用的“标准API”在ACPICA(ACPI Component Architecture Programmer Refer-ence)规范中定义。这些标准API与操作系统相对独立,从而便于ACPICA在不同操作系统中的实现。
如图14-1所示,ACPI机制所覆盖的内容包括ACPI寄存器组、ACPI BIOS和ACPI表。在ACPI寄存器组中含有电源管理、处理器控制和GPE(General-Purpose Event)寄存器组。其中处理器控制寄存器组是可选的,而电源管理和GPE寄存器组是必须实现的。这些与ACPI机制相关的寄存器在Intel的ICH中定义。
电源管理寄存器组由PM1a_STS、PM1a_EN、PM1b_STS、PM1b_EN、PM1_CNTa、PM1_CNTb等寄存器组成。在这些寄存器中,PM1a_STS、PM1_CNTa寄存器和PM1a_EN是必须支持的,而其他寄存器是可选的。在Intel的ICH9中,PM1a_STS寄存器与PM1_STS寄存器对应,PM1_CNTa寄存器与PM1_CNT寄存器对应,而PM1a_EN寄存器与PM1_EN寄存器对应。这些寄存器的简单描述如下,有兴趣的读者可以参考[Intel I/O Controller Hub9]的第13.8节以获得这些寄存器的详细说明。
●PM1_STS寄存器包含当前处理器被唤醒的原因,以及一些与电源按键(Power Button)相关的信息。
●通过操作PM1_CNT寄存器可以使处理器进入不同的休眠状态,并确定ACPI中断请求使用SCI中断请求还是SMI[6]中断请求。
●PM1_EN寄存器设置SCI(System Control Interrupt)中断使能位,决定当PM1_STS寄存器的状态有效时,是否向处理器提交SCI中断请求。SCI中断请求由ACPI规定的相应事件使用,并缺省使用中断向量9向处理器提交中断请求,操作系统使用中断服务程序进一步处理来自ACPI的中断请求。
GPE寄存器组是ACPI寄存器组的一个重要组成部分,由GPE0_STS、GPE0_EN、GPE1_STS和GPE1_EN寄存器组成。在Intel的ICH9中,由General Purpose I/O寄存器组实现ACPI规范的GPE寄存器组。General Purpose I/O寄存器组的使用方法非常简单,对此有兴趣的读者可以参考[Intel I/O Controller Hub 9]的第13.10节。
ACPI的GPEx_STS和GPEx_EN寄存器的使用方法较为简单。其中GPEx_STS寄存器的每一位在GPEx_EN寄存器中都有一个使能位,当GPEx_STS寄存器的某位有效时,表示产生了一个GPE事件,如果与该位相对应的使能位也有效时,ICH将向处理器提交SCI中断请求,由中断服务程序进一步处理这个GPE事件。
ACPI BIOS与操作系统中的ACPI驱动程序/AML解释器(ACPI Driver/ACPI Machine Lan-guage Interpreter)密切相关。操作系统可以使用ACPICA提供的标准API,再通过ACPI驱动程序/AML解释器访问ACPI BIOS,并从ACPI BIOS获得相应的信息后执行与底层硬件相关的代码操纵实际的设备,有关这部分内容的详细说明见下文。
ACPI表描述处理器平台使用的资源和管理这些资源的执行操作,操作系统可以通过标准的API函数访问ACPI表并执行相关的程序,从而维护整个ACPI系统的运转。ACPI表是BIOS提供给系统软件的重要资源。
有关PCI Express体系结构导读的文章
在V1.0之后的ACPI版本中,该描述符表被XSDT取代。值得注意的是,FADT的识别标识是“FACP”,在ACPI表中,FACP.dat文件存放处理器系统的FADT表。该表是ACPI规范最复杂,同时也是最重要的一个表。图14-3 ACPI表的组成结构ACPI表存放在处理器的主存储器中,当处理器系统初始化时,BIOS将这些表放入特定物理内存,之后系统软件可以访问这些表项。在Linux系统中,可以使用以下方法调试ACPI表。......
2023-10-20
在ACPI提供的各类表中,DSDT描述符表最为重要。当操作系统收到ACPI中断请求,即SCI中断请求时,将根据DSDT中提供的代码对相应的ACPI寄存器进行操作,从而完成所需的功能。图14-4 DSDT、ACPI寄存器和操作系统之间的关系下文将举例说明图14-4中各模块之间的关系,以及系统软件如何处理ACPI表。在ACPI中,每一个设备使用的标识不相同。当GPEx_STS寄存器的第0位为1时,将进一步检查PBP和PBW位。......
2023-10-20
在一段程序中,存在大量的分支预测指令,因而在某种程度上增加了指令Fetch的难度。但是分支预测单元并不会每次都能正确判断分支指令的执行路径,这为指令Fetch制造了不小的麻烦,在这个背景下许多分支预测策略应运而生。在PowerPC处理器中,条件转移指令“bc”表示Taken;而“bc-”表示Not Taken。BTB的功能相当于存放转移指令的Cache,其状态机转换也与Cache类似。转移指令B执行完毕后,将实际执行结果Rc更新到BHR寄存器中,并同时更新PHT中对应的Entry。......
2023-10-20
如图8-6所示,Detect状态由Detect.Quiet、Detect.Active两个子状态组成。在正常情况下,PCIe链路将从Detect状态迁移到Polling状态。而在Detect状态中,PCIe设备的发送逻辑TX将直接进入到“Electrical Idle”状态,并不会使用Idle序列通知对端设备的接收逻辑RX。当PCIe设备处于Detect.Quiet状态超过12ms之后,或者检测到PCIe链路上的任何一个Lane退出“Electrical Idle”状态时,PCIe设备将进入Detect.Active状态。......
2023-10-20
Capric卡仅使用BAR0空间,其大小为256B,在该空间中包含以下寄存器,这些寄存器使用小端编码方式,如表12-1所示。表12-1 Capric卡的BAR空间寄存器DCSR1寄存器,该寄存器由7个有效位组成。该寄存器的复位值为0,由32位组成,但是只有最低11位有效,因此Capric卡一次DMA读传送的最大值为0x7FF。当Capric卡的DMA读操作完成后,而且DCSR1寄存器的int_rd_enb位为1时,该位为1表示Capric卡已经向处理器提交了DMA读完成中断请求。......
2023-10-20
而接收逻辑RX处于Electrical Idle状态时,其DC共模输入阻抗必须在PCIe总线规范要求的范围内。如果在“Electrical Idle Exit detector”部件没有正常工作之前,发送逻辑TX就退出Electrical Idle状态,对端的接收逻辑RX将不能检查到这个状态变化,从而导致错误。值得注意的是,这种推断出的Idle状态并不等同于Electrical Idle状态。PCIe总线通过上表判断而得出的Idle状态称为Logical Idle状态。Electrical Idle状态是PCIe链路的相对静止状态,使用的功耗较低。......
2023-10-20
而PCI总线的突发传送仍然存在缺陷。为此PCI-X总线使用基于数据块的突发传送方式,发送端以ADB为单位,将数据发送给接收端,一次突发读写为一个以上的ADB。采用这种方式,接收端可以事先预知是否有足够的接收缓冲,接收来自发送端的数据,从而可以及时断连当前总线周期,以节约PCI-X总线的带宽。因此在PC领域和嵌入式领域很少有基于PCI-X总线的设备,PCI-X设备仅在一些高端服务器上出现。因此本节不对PCI-X总线做进一步描述。......
2023-10-20
MSI Capability结构共有四种组成方式,分别是32和64位的Message结构,32位和64位带中断Masking的结构。MSI Capability寄存器的结构如图10-1所示。图10-1 MSI Capability结构●Capability ID字段记载MSI Capability结构的ID号,其值为0x05。表10-1 MSI Cabalibities结构的Message Control字段[67] 此时PCI设备配置空间Command寄存器的“Interrupt Disable”位为1。当MSI En able位有效时,该字段存放MSI报文使用的数据。该字段需要与Mask Bits字段联合使用。......
2023-10-20
相关推荐