Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 24 Jul 2016 05:24:10 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r303255 - in stable: 10/share/man/man9 10/sys/dev/pci 9/share/man/man9 9/sys/dev/pci
Message-ID:  <201607240524.u6O5OANG008944@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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/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)

Changes in other areas also in this revision:
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)

Modified: stable/10/share/man/man9/pci.9
==============================================================================
--- stable/10/share/man/man9/pci.9	Sun Jul 24 04:38:50 2016	(r303254)
+++ stable/10/share/man/man9/pci.9	Sun Jul 24 05:24:10 2016	(r303255)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 23, 2015
+.Dd June 24, 2016
 .Dt PCI 9
 .Os
 .Sh NAME
@@ -43,6 +43,7 @@
 .Nm pci_find_extcap ,
 .Nm pci_find_htcap ,
 .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 ,
@@ -95,6 +96,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"
@@ -436,6 +439,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/10/sys/dev/pci/pci.c
==============================================================================
--- stable/10/sys/dev/pci/pci.c	Sun Jul 24 04:38:50 2016	(r303254)
+++ stable/10/sys/dev/pci/pci.c	Sun Jul 24 05:24:10 2016	(r303255)
@@ -1881,6 +1881,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/10/sys/dev/pci/pcivar.h
==============================================================================
--- stable/10/sys/dev/pci/pcivar.h	Sun Jul 24 04:38:50 2016	(r303254)
+++ stable/10/sys/dev/pci/pcivar.h	Sun Jul 24 05:24:10 2016	(r303255)
@@ -534,6 +534,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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201607240524.u6O5OANG008944>