diff options
Diffstat (limited to 'backport/backport-include/linux/pci.h')
-rw-r--r-- | backport/backport-include/linux/pci.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h index 84c4e8f6..1cc5f281 100644 --- a/backport/backport-include/linux/pci.h +++ b/backport/backport-include/linux/pci.h @@ -236,4 +236,29 @@ static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev) (PCI_IRQ_LEGACY | PCI_IRQ_MSI | PCI_IRQ_MSIX) #endif +#if defined(CONFIG_PCI) +#if LINUX_VERSION_IS_LESS(5,3,0) +static inline int +backport_pci_disable_link_state(struct pci_dev *pdev, int state) +{ + u16 aspmc; + + pci_disable_link_state(pdev, state); + + pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &aspmc); + if ((state & PCIE_LINK_STATE_L0S) && + (aspmc & PCI_EXP_LNKCTL_ASPM_L0S)) + return -EPERM; + + if ((state & PCIE_LINK_STATE_L1) && + (aspmc & PCI_EXP_LNKCTL_ASPM_L1)) + return -EPERM; + + return 0; +} +#define pci_disable_link_state LINUX_BACKPORT(pci_disable_link_state) + +#endif /* < 5.3 */ +#endif /* defined(CONFIG_PCI) */ + #endif /* _BACKPORT_LINUX_PCI_H */ |