探测处于除 0 之外的其他 D 状态的设备

介绍

在某些情况下,如果打开某些设备电源会产生不利的副作用(而不仅仅是打开该设备电源),则可能更愿意在整个系统启动过程中关闭这些设备电源。

工作原理

_DSC(配置的设备状态)对象求值为整数,可用于在探测期间告知 Linux 设备允许的最高 D 状态。如果总线驱动程序通常将设备设置为 D0 状态以进行探测,则对 _DSC 的支持需要内核总线类型的支持。

使用 _DSC 的缺点是,由于设备未通电,即使设备出现问题,驱动程序也可能探测正常,但第一个用户会发现设备无法正常工作,而不是探测时出现故障。因此,应谨慎使用此功能。

I²C

如果 I²C 驱动程序通过在 struct i2c_driver.flags 字段中设置 I2C_DRV_ACPI_WAIVE_D0_PROBE 标志来指示其支持此功能,并且 _DSC 对象的计算结果为高于设备 D 状态的整数,则设备将不会通电(置于 D0 状态)进行探测。

D states

下面列出了 D 状态以及 _DSC 的允许值。有关设备电源状态的更多信息,请参阅 [1]。

Number  State   Description
0       D0      Device fully powered on
1       D1
2       D2
3       D3hot
4       D3cold  Off

参考

https://uefi.org/specifications/ACPI/6.4/02_Definition_of_Terms/Definition_of_Terms.html#device-power-state-definitions

例子

一个 ASL 示例描述了一个 ACPI 设备,该设备使用 _DSC 对象来告诉操作系统该设备在探测期间应保持断电状态,如下所示。一些与示例无关的对象已被省略。

Device (CAM0)
{
        Name (_HID, "SONY319A")
        Name (_UID, Zero)
        Name (_CRS, ResourceTemplate ()
        {
                I2cSerialBus(0x0020, ControllerInitiated, 0x00061A80,
                             AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                             0x00, ResourceConsumer)
        })
        Method (_DSC, 0, NotSerialized)
        {
                Return (0x4)
        }
}

 

posted @ 2025-03-20 18:32  闹闹爸爸  阅读(16)  评论(0)    收藏  举报