svn commit: r303255 - in stable: 10/share/man/man9 10/sys/dev/pci 9/share/man/man9 9/sys/dev/pci
John Baldwin
jhb at FreeBSD.org
Sun Jul 24 05:24:12 UTC 2016
Author: jhb
Date: Sun Jul 24 05:24:10 2016
New Revision: 303255
URL: https://svnweb.freebsd.org/changeset/base/303255
Log:
MFC 302175:
Add pci_get_max_payload() to fetch the PCI-express maximum payload size.
Modified:
stable/9/share/man/man9/pci.9
stable/9/sys/dev/pci/pci.c
stable/9/sys/dev/pci/pcivar.h
Directory Properties:
stable/9/share/man/man9/ (props changed)
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Changes in other areas also in this revision:
Modified:
stable/10/share/man/man9/pci.9
stable/10/sys/dev/pci/pci.c
stable/10/sys/dev/pci/pcivar.h
Directory Properties:
stable/10/ (props changed)
Modified: stable/9/share/man/man9/pci.9
==============================================================================
--- stable/9/share/man/man9/pci.9 Sun Jul 24 04:38:50 2016 (r303254)
+++ stable/9/share/man/man9/pci.9 Sun Jul 24 05:24:10 2016 (r303255)
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 5, 2015
+.Dd June 24, 2016
.Dt PCI 9
.Os
.Sh NAME
@@ -41,6 +41,7 @@
.Nm pci_find_dbsf ,
.Nm pci_find_device ,
.Nm pci_find_pcie_root_port ,
+.Nm pci_get_max_payload ,
.Nm pci_get_max_read_req ,
.Nm pci_get_powerstate ,
.Nm pci_get_vpd_ident ,
@@ -87,6 +88,8 @@
.Ft device_t
.Fn pci_find_pcie_root_port "device_t dev"
.Ft int
+.Fn pci_get_max_payload "device_t dev"
+.Ft int
.Fn pci_get_max_read_req "device_t dev"
.Ft int
.Fn pci_get_powerstate "device_t dev"
@@ -381,6 +384,16 @@ or
.Xr bus_activate_resource 9 .
.Pp
The
+.Fn pci_get_max_payload
+function returns the current maximum TLP payload size in bytes for a
+PCI-express device.
+If the
+.Fa dev
+device is not a PCI-express device,
+.Fn pci_get_max_payload
+returns zero.
+.Pp
+The
.Fn pci_get_max_read_req
function returns the current maximum read request size in bytes for a
PCI-express device.
Modified: stable/9/sys/dev/pci/pci.c
==============================================================================
--- stable/9/sys/dev/pci/pci.c Sun Jul 24 04:38:50 2016 (r303254)
+++ stable/9/sys/dev/pci/pci.c Sun Jul 24 05:24:10 2016 (r303255)
@@ -1775,6 +1775,22 @@ pci_ht_map_msi(device_t dev, uint64_t ad
}
int
+pci_get_max_payload(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_MAX_PAYLOAD;
+ val >>= 5;
+ return (1 << (val + 7));
+}
+
+int
pci_get_max_read_req(device_t dev)
{
struct pci_devinfo *dinfo = device_get_ivars(dev);
Modified: stable/9/sys/dev/pci/pcivar.h
==============================================================================
--- stable/9/sys/dev/pci/pcivar.h Sun Jul 24 04:38:50 2016 (r303254)
+++ stable/9/sys/dev/pci/pcivar.h Sun Jul 24 05:24:10 2016 (r303255)
@@ -476,6 +476,7 @@ int pci_msix_device_blacklisted(device_t
void pci_ht_map_msi(device_t dev, uint64_t addr);
device_t pci_find_pcie_root_port(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);
void pci_save_state(device_t dev);
More information about the svn-src-stable-9
mailing list