rdma.m4: check if debugfs_create_bool() uses a bool or u32 pointer
[~tnikolova/compat/.git] / compat / compat-3.13.c
1 #include <linux/pci.h>
2
3 /**
4  * pcie_get_mps - get PCI Express maximum payload size
5  * @dev: PCI device to query
6  *
7  * Returns maximum payload size in bytes
8  */
9 int pcie_get_mps(struct pci_dev *dev)
10 {
11         u16 ctl;
12
13         pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
14
15         return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
16 }
17 EXPORT_SYMBOL(pcie_get_mps);
18
19 /**
20  * pcie_set_mps - set PCI Express maximum payload size
21  * @dev: PCI device to query
22  * @mps: maximum payload size in bytes
23  *    valid values are 128, 256, 512, 1024, 2048, 4096
24  *
25  * If possible sets maximum payload size
26  */
27 int pcie_set_mps(struct pci_dev *dev, int mps)
28 {
29         u16 v;
30 #ifndef HAVE_PCI_DEV_PCIE_MPSS
31         int pos;
32         u16 reg16;
33 #endif
34
35         if (mps < 128 || mps > 4096 || !is_power_of_2(mps))
36                 return -EINVAL;
37
38         v = ffs(mps) - 8;
39
40 #ifdef HAVE_PCI_DEV_PCIE_MPSS
41         if (v > dev->pcie_mpss)
42                 return -EINVAL;
43 #else
44         pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
45         if (!pos)
46         return -EINVAL;
47         pci_read_config_word(dev, pos + PCI_EXP_DEVCAP, &reg16);
48         if (v > (reg16 & PCI_EXP_DEVCAP_PAYLOAD))
49                 return -EINVAL;
50 #endif
51         v <<= 5;
52
53         return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
54                                                   PCI_EXP_DEVCTL_PAYLOAD, v);
55 }
56 EXPORT_SYMBOL(pcie_set_mps);