diff options
author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2021-03-16 15:06:42 +0000 |
---|---|---|
committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2021-03-24 07:54:52 +0000 |
commit | ff2e2bca31a53357e70781ab46dc63356c17ef95 (patch) | |
tree | 43face72d717d8064a34d813e5b73f3d7ce81e9f | |
parent | ed407c92e43f88652365c84dc54098a7ed479471 (diff) | |
download | src-ff2e2bca31a53357e70781ab46dc63356c17ef95.tar.gz src-ff2e2bca31a53357e70781ab46dc63356c17ef95.zip |
MFC 1acf24a044aa:
Implement pci_get_relaxed_ordering_enabled() helper function.
Discussed with: kib@
Sponsored by: Mellanox Technologies // NVIDIA Networking
(cherry picked from commit 1acf24a044aaa0391c61af4abe7e018c3bf8a37c)
-rw-r--r-- | sys/dev/pci/pci.c | 15 | ||||
-rw-r--r-- | sys/dev/pci/pcivar.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 1ca128a48ad0..d85ce5baa7bc 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -2183,6 +2183,21 @@ pci_ht_map_msi(device_t dev, uint64_t addr) } int +pci_get_relaxed_ordering_enabled(device_t dev) +{ + struct pci_devinfo *dinfo = device_get_ivars(dev); + int cap; + uint16_t val; + + cap = dinfo->cfg.pcie.pcie_location; + if (cap == 0) + return (0); + val = pci_read_config(dev, cap + PCIER_DEVICE_CTL, 2); + val &= PCIEM_CTL_RELAXED_ORD_ENABLE; + return (val != 0); +} + +int pci_get_max_payload(device_t dev) { struct pci_devinfo *dinfo = device_get_ivars(dev); diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h index 0f04ca8f623c..74aa704635f7 100644 --- a/sys/dev/pci/pcivar.h +++ b/sys/dev/pci/pcivar.h @@ -677,6 +677,7 @@ int pci_msix_device_blacklisted(device_t dev); void pci_ht_map_msi(device_t dev, uint64_t addr); device_t pci_find_pcie_root_port(device_t dev); +int pci_get_relaxed_ordering_enabled(device_t dev); int pci_get_max_payload(device_t dev); int pci_get_max_read_req(device_t dev); void pci_restore_state(device_t dev); |