svn commit: r303722 - head/sys/dev/cxgbe

John Baldwin jhb at FreeBSD.org
Wed Aug 3 17:11:10 UTC 2016


Author: jhb
Date: Wed Aug  3 17:11:08 2016
New Revision: 303722
URL: https://svnweb.freebsd.org/changeset/base/303722

Log:
  Use the port device name for the iov device for Chelsio T4/T5 cards.
  
  Chelsio T4/T5 adapters are multifunction cards.  The main driver uses
  physical function 4 (PF4).  However, VF devices for SR-IOV are only
  supported on physical functions 0 through 3, where PF0 creates VFs tied
  to port 0, etc.  The t4iov/t5iov driver was previously added to
  create VF devices for ports that are present on each adapter.  This
  change uses the recently added pci_iov_attach_name() function to
  name the character device in /dev/iov after the associated port on
  the card (e.g. /dev/iov/cxl0 is used to create VFs that share the
  cxl0 port).  With this in place, mark the t4iov/t5iov devices quiet
  to prevent them from cluttering dmesg.
  
  Reviewed by:	rstone
  Sponsored by:	Chelsio Communications
  Differential Revision:	https://reviews.freebsd.org/D7402

Modified:
  head/sys/dev/cxgbe/t4_if.m
  head/sys/dev/cxgbe/t4_iov.c
  head/sys/dev/cxgbe/t4_main.c

Modified: head/sys/dev/cxgbe/t4_if.m
==============================================================================
--- head/sys/dev/cxgbe/t4_if.m	Wed Aug  3 17:09:12 2016	(r303721)
+++ head/sys/dev/cxgbe/t4_if.m	Wed Aug  3 17:11:08 2016	(r303722)
@@ -55,11 +55,11 @@ METHOD int detach_child {
 	device_t	dev;
 };
 
-# Called by a driver to query the PF4 driver for the unit number to use
-# for a given port.  If the port is not enabled on the adapter, this
-# will fail.
-METHOD int read_port_unit {
+# Called by a driver to query the PF4 driver for the child device
+# associated with a given port.  If the port is not enabled on the adapter,
+# this will fail.
+METHOD int read_port_device {
 	device_t	dev;
 	int		port;
-	int		*unit;
+	device_t	*child;
 };

Modified: head/sys/dev/cxgbe/t4_iov.c
==============================================================================
--- head/sys/dev/cxgbe/t4_iov.c	Wed Aug  3 17:09:12 2016	(r303721)
+++ head/sys/dev/cxgbe/t4_iov.c	Wed Aug  3 17:11:08 2016	(r303722)
@@ -104,6 +104,7 @@ t4iov_probe(device_t dev)
 	for (i = 0; i < nitems(t4iov_pciids); i++) {
 		if (d == t4iov_pciids[i].device) {
 			device_set_desc(dev, t4iov_pciids[i].desc);
+			device_quiet(dev);
 			return (BUS_PROBE_DEFAULT);
 		}
 	}
@@ -120,6 +121,7 @@ t5iov_probe(device_t dev)
 	for (i = 0; i < nitems(t5iov_pciids); i++) {
 		if (d == t5iov_pciids[i].device) {
 			device_set_desc(dev, t5iov_pciids[i].desc);
+			device_quiet(dev);
 			return (BUS_PROBE_DEFAULT);
 		}
 	}
@@ -148,25 +150,27 @@ t4iov_attach_child(device_t dev)
 #ifdef PCI_IOV
 	nvlist_t *pf_schema, *vf_schema;
 #endif
-	int error, unit;
+	device_t pdev;
+	int error;
 
 	sc = device_get_softc(dev);
 	MPASS(!sc->sc_attached);
 
 	/*
 	 * PF0-3 are associated with a specific port on the NIC (PF0
-	 * with port 0, etc.).  Ask the PF4 driver for the unit number
-	 * for this function's associated port to determine if the port
-	 * is present.
+	 * with port 0, etc.).  Ask the PF4 driver for the device for
+	 * this function's associated port to determine if the port is
+	 * present.
 	 */
-	error = T4_READ_PORT_UNIT(sc->sc_main, pci_get_function(dev), &unit);
+	error = T4_READ_PORT_DEVICE(sc->sc_main, pci_get_function(dev), &pdev);
 	if (error)
 		return (0);
 
 #ifdef PCI_IOV
 	pf_schema = pci_iov_schema_alloc_node();
 	vf_schema = pci_iov_schema_alloc_node();
-	error = pci_iov_attach(dev, pf_schema, vf_schema);
+	error = pci_iov_attach_name(dev, pf_schema, vf_schema, "%s",
+	    device_get_nameunit(pdev));
 	if (error) {
 		device_printf(dev, "Failed to initialize SR-IOV: %d\n", error);
 		return (0);

Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c	Wed Aug  3 17:09:12 2016	(r303721)
+++ head/sys/dev/cxgbe/t4_main.c	Wed Aug  3 17:11:08 2016	(r303722)
@@ -83,14 +83,14 @@ static int t4_probe(device_t);
 static int t4_attach(device_t);
 static int t4_detach(device_t);
 static int t4_ready(device_t);
-static int t4_read_port_unit(device_t, int, int *);
+static int t4_read_port_device(device_t, int, device_t *);
 static device_method_t t4_methods[] = {
 	DEVMETHOD(device_probe,		t4_probe),
 	DEVMETHOD(device_attach,	t4_attach),
 	DEVMETHOD(device_detach,	t4_detach),
 
 	DEVMETHOD(t4_is_main_ready,	t4_ready),
-	DEVMETHOD(t4_read_port_unit,	t4_read_port_unit),
+	DEVMETHOD(t4_read_port_device,	t4_read_port_device),
 
 	DEVMETHOD_END
 };
@@ -149,7 +149,7 @@ static device_method_t t5_methods[] = {
 	DEVMETHOD(device_detach,	t4_detach),
 
 	DEVMETHOD(t4_is_main_ready,	t4_ready),
-	DEVMETHOD(t4_read_port_unit,	t4_read_port_unit),
+	DEVMETHOD(t4_read_port_device,	t4_read_port_device),
 
 	DEVMETHOD_END
 };
@@ -1094,7 +1094,7 @@ t4_ready(device_t dev)
 }
 
 static int
-t4_read_port_unit(device_t dev, int port, int *unit)
+t4_read_port_device(device_t dev, int port, device_t *child)
 {
 	struct adapter *sc;
 	struct port_info *pi;
@@ -1105,7 +1105,7 @@ t4_read_port_unit(device_t dev, int port
 	pi = sc->port[port];
 	if (pi == NULL || pi->dev == NULL)
 		return (ENXIO);
-	*unit = device_get_unit(pi->dev);
+	*child = pi->dev;
 	return (0);
 }
 


More information about the svn-src-head mailing list