ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 9 章

    • 总览
    • 9.1. 设备对象名称冲突
    • 9.2. \_SI 系统指示器
    • 9.3. 环境光传感器设备
    • 9.4. 电池设备
    • 9.5. 控制方法盖板设备
    • 9.6. 控制方法电源按钮和睡眠按钮设备
    • 9.7. 嵌入式控制器设备
    • 9.8. 通用容器设备
    • 9.9. ATA 控制器设备
    • 9.10. 软盘控制器设备对象
    • 9.11. GPE 块设备
    • 9.12. 模块设备
    • 9.13. 内存设备
    • 9.14. _UPC(USB 端口能力)
    • 9.15. PC/AT RTC/CMOS 设备
    • 9.16. 用户存在检测设备
    • 9.17. I/O APIC 设备
    • 9.18. 时间和报警设备
    • 9.19. 通用按钮设备
    • 9.20. NVDIMM 设备
      • 9.20.1. 概述
      • 9.20.2. NVDIMM 根设备
      • 9.20.3. NVDIMM 设备
      • 9.20.4. 示例
      • 9.20.5. 加载 NVDIMM 驱动程序
      • 9.20.6. 热插拔支持
      • 9.20.7. NVDIMM 根设备 _DSMs
      • 9.20.8. NVDIMM 设备方法

9.13. 内存设备

内存设备允许平台向 OSPM 传达内存的动态属性,并且当平台支持在系统处于活动状态时添加或移除内存,或者当平台支持内存带宽监视和报告时(见第 9.13.2 节),则必须提供内存设备。内存设备描述的物理内存可能与系统地址映射接口描述的物理内存完全相同(见第 15 节)。它们不描述该内存是如何被使用或曾经如何被使用的。如果一段物理内存在系统地址映射接口中被标记为 AddressRangeReserved 或 AddressRangeNVS,并且它也在某个内存设备中被描述,那么 OS 有责任保证该内存设备永远不会被禁用。

如果系统中有一部分内存在本质上是静态的,则没有必要用内存设备来描述系统中的所有内存。例如,如果用于系统 RAM 前 16 MB 的内存不能被弹出、插入或禁用,则该内存可以仅由系统地址映射接口表示。但是,如果内存可以被弹出、插入或禁用,或者平台支持内存带宽监视和报告,则该内存必须由内存设备表示。

9.13.1. 地址解码

内存设备必须提供一个 _CRS 对象,用于描述该内存所解码的物理地址空间。如果该内存能够解码物理地址空间中的备选范围,则这些设备还可以提供 _PRS、_SRS 和 _DIS 对象。如果该设备可以被弹出,则其他设备对象也可能适用。

9.13.2. 内存带宽监视和报告

在平台运行期间,平台外部可能会出现一种不利条件,其补救措施需要降低平台可用的内存带宽。例如,服务器管理控制器检测到不利的热条件,或者为了保持在可接受的限制内而需要降低数据中心中平台的总功耗。向 OSPM 提供关于平台导致的内存带宽降低的信息,使 OSPM 能够对该情况进行更稳健的处理。以下各节描述了 OSPM 用于配置基于平台的内存带宽监视以及在平台执行内存带宽节流时确定可用内存带宽的对象。

9.13.2.1. _MBM(内存带宽监视数据)

可选的 _MBM 对象为内存设备提供内存带宽监视信息。

参数:

无

返回值:

一个 Package,包含如下文 MBM 包详细信息中所述的内存设备状态信息。

返回值信息:

对 _MBM 求值将返回一个具有以下格式的包:

Package (){
  Revision, // Integer
  WindowSize, // Integer DWORD
  SamplingInterval, // Integer DWORD
  MaximumBandwidth, // Integer DWORD
  AverageBandwidth, // Integer DWORD
  LowBandwidth, // Integer DWORD
  LowNotficationThreshold, // Integer DWORD
  HighNotificationThreshold // Integer DWORD
}

表 9.8 MBM 包详细信息

字段格式描述
RevisionInteger当前修订版本为:0
Window SizeInteger (DWORD)此字段指示平台用于报告平均带宽的平均窗口大小(以秒为单位)。
Sampling IntervalInteger (DWORD)此字段指示平台在平均窗口期间用于记录带宽的采样间隔(以秒为单位)。
Maximum BandwidthInteger (DWORD)此字段指示由该内存设备描述的内存的最大内存带宽(以每秒兆字节为单位)。
Average BandwidthInteger (DWORD)此字段指示该平均窗口的移动平均内存带宽(以百分比表示)。
Low BandwidthInteger (DWORD)此字段指示为该平均窗口记录的最低内存带宽(以百分比表示)。
Low Notification ThresholdInteger (DWORD)当移动平均内存带宽值(以百分比表示)低于此字段指示的值时,平台在该内存设备上发出 Notify (0x80)。
High Notification ThresholdInteger (DWORD)当移动平均内存带宽值(以百分比表示)增加到或超过此字段指示的值时,平台在该内存设备上发出 Notify (0x81)。

9.13.2.2. _MSM(内存设置监视)

此可选对象用于设置上文第 9.13.2.1 节中描述的内存带宽监视参数。

参数(4)

Arg0 - WindowSize (Integer(DWORD)):指示窗口大小(秒)。

Arg1 - SamplingInterval (Integer(DWORD)):指示采样间隔(秒)。

Arg2 - LowNotificationThreshold (Integer(DWORD)):指示低通知阈值(百分比)。必须 <= HighNotificationThreshold。

Arg3 - HighNotificationThreshold (Integer(DWORD)):指示高通知阈值(百分比)。必须 >= LowNotificationThreshold。

返回值

一个 Integer (DWORD),包含按位编码的结果代码,如下所示:

0x00000000 - 成功设置所有内存带宽监视参数。

非零 - 至少有一个内存带宽监视参数值无法按如下方式设置:

表 9.9 MSM 结果编码

位定义
0若清零则表示 WindowSize 设置成功。若置位,则表示 WindowSize 参数无效。
1若清零则表示 SamplingInterval 设置成功。若置位,则表示 SamplingInterval 参数无效。
2若清零则表示 LowNotificationThreshold 设置成功。若置位,则表示 LowNotificationThreshold 参数无效。
3若清零则表示 HighNotificationThreshold 设置成功。若置位,则表示 HighNotificationThreshold 参数无效。
31:4保留(必须为 0)

9.13.3. 用于内存设备的 _OSC 定义

OSPM 在内存设备下对 _OSC 求值,以向平台传达 OSPM 的能力。参数定义如下

参数(4)

Arg0 - UUID (Buffer): 03B19910-F473-11DD-87AF-0800200C9A66

Arg1 - Revision ID (Integer): 1

Arg2 - Arg3 中条目的数量 (Integer): 2

Arg3 - DWORD 能力 (Buffer):

  • 第一个 DWORD:见第 6.2.10 节

  • 第二个 DWORD:见第 6.4.3.5.2 节。

返回值

一个 Buffer,包含平台能力

表 9.10 内存设备 _OSC 能力 DWORD 编号 2

位字段名称定义
0内存带宽变更通知如果 OSPM 支持处理内存带宽变更通知,则设置此位。如果平台支持在内存带宽发生变化时发出通知的能力,则只有在对此位被设置的情况下对 _OSC 求值之后才可以这样做。如果在此位清除的状态下对 _OSC 求值,则如果先前已启用,平台将停止发出通知。
31:1保留(必须为 0)

返回值信息

能力缓冲区(缓冲区)- 平台通过返回一个长度相同的 DWORD 缓冲区来确认能力缓冲区。置位的位表示已确认,清零的位表示平台不支持该能力。

9.13.4. 示例:内存设备

Scope (\_SB){
    Device (MEM0) {
        Name (_HID, EISAID ("PNP0C80"))
        Name (_CRS, ResourceTemplate () {
            QWordMemory
                ResourceConsumer,
                ,
                MinFixed,
                MaxFixed,
                Cacheable,
                ReadWrite,
                0xFFFFFFF,
                0x10000000,
                0x30000000,
                0,
                ,,)
            }
        }
    }
Prev
9.12. 模块设备
Next
9.14. _UPC(USB 端口能力)