Subject: [PATCH] PCI: Add generic pcie_link_disable Remove not needed return value checking that Linus pointed out before. Will use it from /sys/.../pcie/link_disable Signed-off-by: Yinghai Lu --- drivers/pci/Makefile | 2 +- drivers/pci/pcie-link.c | 42 ++++++++++++++++++++++++++++++++++++++++++ include/linux/pci.h | 2 ++ 3 files changed, 45 insertions(+), 1 deletion(-) Index: linux-2.6/drivers/pci/pcie-link.c =================================================================== --- /dev/null +++ linux-2.6/drivers/pci/pcie-link.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include + +int pcie_link_disable_get(struct pci_dev *dev) +{ + u16 lnk_ctrl; + if (!pci_is_pcie(dev)) + return 0; + + pcie_capability_read_word(dev, PCI_EXP_LNKCTL, &lnk_ctrl); + + return !!(lnk_ctrl & PCI_EXP_LNKCTL_LD); +} + +void pcie_link_disable_set(struct pci_dev *dev, int bit) +{ + u16 lnk_ctrl, old_lnk_ctrl; + + if (!pci_is_pcie(dev)) + return; + + pcie_capability_read_word(dev, PCI_EXP_LNKCTL, &lnk_ctrl); + old_lnk_ctrl = lnk_ctrl; + + if (!bit) + lnk_ctrl &= ~PCI_EXP_LNKCTL_LD; + else + lnk_ctrl |= PCI_EXP_LNKCTL_LD; + + if (old_lnk_ctrl == lnk_ctrl) + return; + + pcie_capability_write_word(dev, PCI_EXP_LNKCTL, lnk_ctrl); + + dev_printk(KERN_DEBUG, &dev->dev, "%s: lnk_ctrl = %x\n", __func__, + lnk_ctrl); +} +EXPORT_SYMBOL(pcie_link_disable_set); Index: linux-2.6/include/linux/pci.h =================================================================== --- linux-2.6.orig/include/linux/pci.h +++ linux-2.6/include/linux/pci.h @@ -842,6 +842,8 @@ struct pci_bus *pci_scan_root_bus(struct struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr); void pcie_update_link_speed(struct pci_bus *bus, u16 link_status); +void pcie_link_disable_set(struct pci_dev *dev, int bit); +int pcie_link_disable_get(struct pci_dev *dev); struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, const char *name, struct hotplug_slot *hotplug); Index: linux-2.6/drivers/pci/Makefile =================================================================== --- linux-2.6.orig/drivers/pci/Makefile +++ linux-2.6/drivers/pci/Makefile @@ -4,7 +4,7 @@ obj-y += access.o bus.o probe.o host-bridge.o remove.o pci.o \ pci-driver.o search.o pci-sysfs.o rom.o setup-res.o \ - irq.o vpd.o setup-bus.o vc.o + irq.o vpd.o setup-bus.o pcie-link.o vc.o obj-$(CONFIG_PROC_FS) += proc.o obj-$(CONFIG_SYSFS) += slot.o