aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2021-03-16 15:06:42 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2021-03-24 07:59:58 +0000
commit7cf565b2c5f0ed90eecd52b0fde8b81b746d662e (patch)
tree2dadc58ec4695fbcdc238b80a71a6c1adee462cc
parentd00a723a2a5c1cd686fdab4b6d9c5084705d7182 (diff)
downloadsrc-7cf565b2c5f0ed90eecd52b0fde8b81b746d662e.tar.gz
src-7cf565b2c5f0ed90eecd52b0fde8b81b746d662e.zip
Implement pci_get_relaxed_ordering_enabled() helper function.
Discussed with: kib@ MFC after: 1 week Sponsored by: Mellanox Technologies // NVIDIA Networking (cherry picked from commit 1acf24a044aaa0391c61af4abe7e018c3bf8a37c)
-rw-r--r--sys/dev/pci/pci.c15
-rw-r--r--sys/dev/pci/pcivar.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 644336562a3b..f3a0309c5202 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -2161,6 +2161,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 65f37a85edd7..b3126ad8dc51 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -670,6 +670,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);