Aqui está o meu rastreamento (deixe-me saber se estou errado)
power_write_file () link
slot->ops->disable_slot(slot);
ops->disable_slot = disable_slot;
static int disable_slot(struct hotplug_slot *hotplug_slot)
{
struct slot *slot = hotplug_slot->private;
return pciehp_sysfs_disable_slot(slot);
}
retval = pciehp_disable_slot(p_slot);
remove_board(struct slot *p_slot)
finalmente, conseguimos:
void pciehp_power_off_slot(struct slot *slot)
{
struct controller *ctrl = slot->ctrl;
pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_OFF, PCI_EXP_SLTCTL_PCC);
ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__,
pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL,
PCI_EXP_SLTCTL_PWR_OFF);
}
#define PCI_EXP_SLTCTL_PWR_OFF 0x0400 /* Power Off */
#define PCI_EXP_SLTCTL 24 /* Slot Control */
0x0400 == > 10000000000 # bit 10 == 1 == > O registro de controle do controlador de energia é 1 no registro de controle de slot (deslocamento 18h == 24)
de acordo com as especificações do PCIe sobre o registro de controle de controle de energia:
0b Power On
1b Power Off
portanto, a resposta é sim,
o kernel mudará o registro de Controle de Controle de Potência no Registro de Controle de Slot.