pcibus.c 544 B

12345678910111213141516171819202122232425
  1. #include <linux/pci.h>
  2. int pcidriver_pcie_get_mps(struct pci_dev *dev)
  3. {
  4. u16 ctl;
  5. pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
  6. return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
  7. }
  8. int pcidriver_pcie_set_mps(struct pci_dev *dev, int mps)
  9. {
  10. u16 v;
  11. if (mps < 128 || mps > 4096 || !is_power_of_2(mps))
  12. return -EINVAL;
  13. v = ffs(mps) - 8;
  14. if (v > dev->pcie_mpss)
  15. return -EINVAL;
  16. v <<= 5;
  17. return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_PAYLOAD, v);
  18. }