6.2.17. _CCA(缓存一致性属性)
_CCA 对象返回总线主控设备是否支持硬件管理的缓存一致性。预期值为 0,表示不支持;1,表示支持。所有其他值均为保留值。
对于现有 OS 默认缓存一致性行为不足以满足需求的平台,_CCA 使 OS 能够适应这些差异。如果使用 _CCA,则必须将其包含在 \_SB 的所有定义为子节点的、具备总线主控能力的设备之下,以确保操作系统知道何时可以依赖硬件管理的缓存一致性。_CCA 的值会被这些设备的所有后代继承,因此无需在其子设备中重复提供;如果在那里提供,OSPM 将忽略它。这也包括共享 DMA 控制器上的从设备;因此,这些 DMA 控制器也必须在系统总线下的命名空间中定义,并包含 _CCA 对象。
如果某个设备表明它不支持硬件缓存一致性,则 OSPM 必须使用软件缓存刷新算法,以确保不会从缓存中访问到陈旧或无效的数据。
_CCA 对象仅与能够访问 CPU 可见内存的设备相关,例如具备 DMA 能力的设备。在基于 ARM 的系统上,必须为所有此类设备提供 _CCA 对象。在 Intel 平台上,如果未提供 _CCA 对象,OSPM 将假定这些设备具有硬件缓存一致性。
参数:
无
返回值:
一个 Integer,指示设备对硬件缓存一致性的支持情况:
0 - 该设备不具有硬件管理的缓存一致性 1 - 该设备具有硬件管理的缓存一致性 其他值 - 保留
注
关于何时对此对象进行求值存在一些限制,这会影响将此对象实现为控制方法。_CCA 方法只能访问那些已由 _REG 方法指示为可用的 Operation Regions。_REG 方法在 _REG(区域)中描述。
6.2.17.1. _CCA ASL 示例:
Scope (\_SB) {
...
Device (XHCI) {
...
Name (_CCA, ZERO) // Cache-incoherent bus-master, child of \\_SB
...
}
...
Device (PCI0) { // Root PCI Bus
...
Name (_CCA, ONE) // Cache-coherent bus-master, child of \\_SB
...
Device (PRT0) {
... // Bus-master-capable, not a child of \\_SB
... // Will inherit coherency from PCI0, no \_CCA required
Device (NIC0) {
... // Bus-master-capable, not a child of \\_SB
... // Will inherit coherency from PRT0, no \_CCA required
}
}
}
...
Device (SDHC) {
...
Name (_CCA, ONE) // Cache-coherent bus-master-capable, child of \\_SB
...
}
...
Device (GPIO) {
... // Not bus-master-capable
... // \_CCA not valid
}
...
Device (DMAC) {
... // DMA controller; \_CCA must be specified
Name (_CCA, ONE) // Cache coherent bus-master, child of \\_SB
...
}
...
Device (SPI1) {
...
Name (_CRS, ResourceTemplate()
{
FixedDMA(...) // Sharing the DMA, thus inherits coherency from it
...
...
})
... // \_CCA not valid
}
}