将PCI设备切换到D3冷(D3cold)状态

时间:2015-01-21 23:19:22

标签: c unix linux-kernel power-management pci

我需要在Linux中以phisical方式关闭我的PCI设备。我找到了我需要的函数,但它似乎编写了一个内核模式应用程序来使用该库,因为我在内核头文件中找到它。

我在drivers / pci / pci.c中找到了这个函数int pci_set_power_state(struct pci_dev *dev, pci_power_t state),我不知道如何使用它。

另外,我在文档中读到,一般设备驱动程序不用于将设备切换到d3cold,因为设备只是关闭而根本不工作(是的,有一些设备,可以不完全关闭,并且能够发送唤醒呼叫,但这是另一个故事......)我想,我需要与PCI总线通信。

我不知道在哪里寻找答案,请指导我的任务。

2 个答案:

答案 0 :(得分:1)

潜在方法1 我认为您可以使用以下命令来做到这一点:

禁用

  

回声0> / sys / bus / pci / slots / $ NUMBER / power

启用

  

回声1> / sys / bus / pci / slots / $ NUMBER / power

其中$ NUMBER是PCI插槽的编号。

lspci -vv可能有助于识别设备。这没有很好的记录...

答案 1 :(得分:0)

另一种方法是将关机通知发送到pci设备。我以nvm设备为例

  1. 通过lspci读取bar0值,偏移量为10h。

    lspci -s 01:00.0 -xxxx。例如,您得到了值:0xfc1f4004

  2. addr为0xfc1f4000的读存储器

  3. 在0xfc1f4014的位14中写入1

偏移14h:CC –控制器配置。 Bit 15:14 = 01b正常关机通知