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.12. 模块设备

此可选设备是一个容器对象,在命名空间中充当总线节点。它可以包含作为设备或总线的子对象。模块设备使用 ACPI0004 硬件标识符(HID)声明。

如果模块设备包含 _CRS 对象,则认为该对象所描述的总线具有这些资源可供其子设备使用。如果存在 _CRS 对象,则任何未在模块设备的 _CRS 对象中产生的资源都不得分配给子设备。

在某些模块设备中,提供 _CRS 对象并不可取。例如,考虑一个用于描述附加板卡的模块设备,该板卡包含多个主桥但没有任何共享资源译码逻辑。在这种情况下,主桥可用的资源范围不受驻留在该附加板卡上的任何实体控制,这意味着关联模块设备中的 _CRS 对象并未描述底层硬件的任何真实特性。如果设备包含任何 PCI 主桥设备,则模块设备必须包含 _CRS 对象。

为考虑此类情况,系统设计者可以选择省略模块设备的 _CRS 对象。如果不存在 _CRS 对象,OSPM 将假定该模块设备是一个简单的容器对象,不产生其子设备所消耗的资源。在这种情况下,OSPM 将像对待模块设备父对象的直接子对象那样为这些子设备分配资源。

例如,在模块设备存在 _CRS 对象的情况下,考虑一个包含三个子内存设备的模块设备。如果该模块设备的 _CRS 对象包含从 2 GB 到 6 GB 的内存,则子内存设备只能被分配该范围内的地址。

示例:

Device (\_SB.NOD0) {
    Name (_HID, "ACPI0004")       // Module device
    Name (_UID, 0)
    Name (_PRS, ResourceTemplate() {
        WordIO (
            ResourceProducer,
            MinFixed,             // \_MIF
            MaxFixed,,,           // \_MAF
            0x0000,               // \_GRA
            0x0000,               // \_MIN
            0x7FFF,               // \_MAX
            0x0,                  // \_TRA
            0x8000)               // \_LEN
        DWordMemory (
            ResourceProducer,,    // For Main Memory + PCI
            MinNotFixed,          // _MIF
            MaxNotFixed,          // _MAF
            Cacheable,            // _MEM
            ReadWrite,            // _RW
            0x0FFFFFFF,           // _GRA
            0x40000000,           // _MIN
            0x7FFFFFFF,           // _MAX
            0x0,                  // _TRA
            0x00000000)           // _LEN
    })
    Method (_SRS, 1) { ... }
    Method (_CRS, 0) { ... }

    Device (MEM0) {               // Main Memory (256MB module)
        Name (_HID, EISAID("PNP0C80"))
        Name (_UID, 0)
        Method (_STA, 0) {        // If memory not present --> Return(0x00),
                                  // Else if memory is disabled --> Return(0x0D),
                                  // Else --> Return(0x0F)
        }
        Name (_PRS, ResourceTemplate () {
            DWordMemory (,,,,
                Cacheable,          // _MEM
                ReadWrite,          // _RW
                0x0FFFFFFF,         // _GRA
                0x40000000,         // _MIN
                0x7FFFFFFF,         // _MAX
                0x0,                // _TRA
                0x10000000)         // _LEN
            })
            Method (_CRS, 0) { ... }
            Method (_SRS, 1) { ... }
            Method (_DIS, 0) { ... }
        }
        Device (MEM1) {             // Main Memory (512MB module)
            Name (_HID, EISAID("PNP0C80"))
            Name (_UID, 1)
            Method (_STA, 0) {      // If memory not present --> Return(0x00)
                                    // Else if memory is disabled --> Return(0x0D)
                                    // Else --> Return(0x0F)
            }
            Name (_PRS, ResourceTemplate () {
                DWordMemory (,,,,
                    Cacheable,      // _MEM
                    ReadWrite,      // _RW
                    0x1FFFFFFF,     // _GRA
                    0x40000000,     // _MIN
                    0x7FFFFFFF,     // _MAX
                    0x0,            // _TRA
                    0x20000000)     // _LEN
                })
                Method (_CRS, 0) { ... }
                Method (_SRS, 1) { ... }
                Method (_DIS, 0) { ... }
            }
            Device (PCI0) { // PCI Root Bridge
                Name (_HID, EISAID("PNP0A03"))
                Name (_UID, 0)
                Name (_BBN, 0x00)
                Name (_PRS, ResourceTemplate () {
                    WordBusNumber (
                        ResourceProducer,
                        MinFixed,   // _MIF
                        MaxFixed,,  // _MAF
                        0x00,       // _GRA
                        0x00,       // _MIN
                        0x7F,       // _MAX
                        0x0,        // _TRA
                        0x80)       // _LEN
                    WordIO (
                        ResourceProducer,
                        MinFixed,   // _MIF
                        MaxFixed,,, // _MAF
                        0x0000,     // _GRA
                        0x0000,     // _MIN
                        0x0CF7,     // _MAX
                        0x0,        // _TRA
                        0x0CF8)     // _LEN
                    WordIO (
                        ResourceProducer,
                        MinFixed,   // _MIF
                        MaxFixed,,, // _MAF
                        0x0000,     // _GRA
                        0x0D00,     // _MIN
                        0x7FFF,     // _MAX
                        0x0,        // _TRA
                        0x7300)     // _LEN

                    DWordMemory (
                        ResourceProducer,,
                        MinNotFixed,   // _MIF
                        MaxNotFixed,   // _MAF
                        NonCacheable,  // _MEM
                        ReadWrite,     // _RW
                        0x0FFFFFFF,    // _GRA
                        0x40000000,    // _MIN
                        0x7FFFFFFF,    // _MAX
                        0x0,           // _TRA
                        0x00000000)    // _LEN
            })
            Method (_CRS, 0) { ... }
            Method (_SRS, 1) { ... }
    }
}
Prev
9.11. GPE 块设备
Next
9.13. 内存设备