svn commit: r293075 - user/ngie/stable-10-libnv/sys/dev/pci

Garrett Cooper ngie at FreeBSD.org
Sun Jan 3 06:25:23 UTC 2016


Author: ngie
Date: Sun Jan  3 06:25:22 2016
New Revision: 293075
URL: https://svnweb.freebsd.org/changeset/base/293075

Log:
  MFC r279443:
  r279443 (by rstone):
  
  Add some pcib methods to get ARI-related information

Modified:
  user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c
  user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m
  user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h
  user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c
  user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h
Directory Properties:
  user/ngie/stable-10-libnv/   (props changed)

Modified: user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c
==============================================================================
--- user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c	Sun Jan  3 06:12:53 2016	(r293074)
+++ user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c	Sun Jan  3 06:25:22 2016	(r293075)
@@ -64,6 +64,9 @@ static void		pcib_write_config(device_t 
 static int		pcib_ari_maxslots(device_t dev);
 static int		pcib_ari_maxfuncs(device_t dev);
 static int		pcib_try_enable_ari(device_t pcib, device_t dev);
+static int		pcib_ari_enabled(device_t pcib);
+static void		pcib_ari_decode_rid(device_t pcib, uint16_t rid,
+			    int *bus, int *slot, int *func);
 
 static device_method_t pcib_methods[] = {
     /* Device interface */
@@ -104,6 +107,8 @@ static device_method_t pcib_methods[] = 
     DEVMETHOD(pcib_power_for_sleep,	pcib_power_for_sleep),
     DEVMETHOD(pcib_get_rid,		pcib_ari_get_rid),
     DEVMETHOD(pcib_try_enable_ari,	pcib_try_enable_ari),
+    DEVMETHOD(pcib_ari_enabled,		pcib_ari_enabled),
+    DEVMETHOD(pcib_decode_rid,		pcib_ari_decode_rid),
 
     DEVMETHOD_END
 };
@@ -1867,6 +1872,24 @@ pcib_ari_maxfuncs(device_t dev)
 		return (PCI_FUNCMAX);
 }
 
+static void
+pcib_ari_decode_rid(device_t pcib, uint16_t rid, int *bus, int *slot,
+    int *func)
+{
+	struct pcib_softc *sc;
+
+	sc = device_get_softc(pcib);
+
+	*bus = PCI_RID2BUS(rid);
+	if (sc->flags & PCIB_ENABLE_ARI) {
+		*slot = PCIE_ARI_RID2SLOT(rid);
+		*func = PCIE_ARI_RID2FUNC(rid);
+	} else {
+		*slot = PCI_RID2SLOT(rid);
+		*func = PCI_RID2FUNC(rid);
+	}
+}
+
 /*
  * Since we are a child of a PCI bus, its parent must support the pcib interface.
  */
@@ -1998,6 +2021,16 @@ pcib_power_for_sleep(device_t pcib, devi
 	return (PCIB_POWER_FOR_SLEEP(bus, dev, pstate));
 }
 
+static int
+pcib_ari_enabled(device_t pcib)
+{
+	struct pcib_softc *sc;
+
+	sc = device_get_softc(pcib);
+
+	return ((sc->flags & PCIB_ENABLE_ARI) != 0);
+}
+
 static uint16_t
 pcib_ari_get_rid(device_t pcib, device_t dev)
 {

Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m
==============================================================================
--- user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m	Sun Jan  3 06:12:53 2016	(r293074)
+++ user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m	Sun Jan  3 06:25:22 2016	(r293075)
@@ -39,6 +39,13 @@ CODE {
 	{
 		return (PCI_INVALID_IRQ);
 	}
+
+	static int
+	pcib_null_ari_enabled(device_t pcib)
+	{
+
+		return (0);
+	}
 };
 
 #
@@ -182,3 +189,21 @@ METHOD int try_enable_ari {
 	device_t	dev;
 };
 
+#
+# Return non-zero if PCI ARI is enabled, or zero otherwise
+#
+METHOD int ari_enabled {
+	device_t	pcib;
+} DEFAULT pcib_null_ari_enabled;
+
+#
+# Decode a PCI Routing Identifier (RID) into PCI bus/slot/function
+#
+METHOD void decode_rid {
+	device_t	pcib;
+	uint16_t	rid;
+	int 		*bus;
+	int 		*slot;
+	int 		*func;
+} DEFAULT pcib_decode_rid;
+

Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h
==============================================================================
--- user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h	Sun Jan  3 06:12:53 2016	(r293074)
+++ user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h	Sun Jan  3 06:25:22 2016	(r293075)
@@ -170,5 +170,7 @@ int		pcib_alloc_msix(device_t pcib, devi
 int		pcib_release_msix(device_t pcib, device_t dev, int irq);
 int		pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data);
 uint16_t	pcib_get_rid(device_t pcib, device_t dev);
+void		pcib_decode_rid(device_t pcib, uint16_t rid, int *bus, 
+		    int *slot, int *func);
 
 #endif

Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c
==============================================================================
--- user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c	Sun Jan  3 06:12:53 2016	(r293074)
+++ user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c	Sun Jan  3 06:25:22 2016	(r293075)
@@ -66,3 +66,13 @@ pcib_get_rid(device_t pcib, device_t dev
 	return (PCI_RID(bus, slot, func));
 }
 
+void
+pcib_decode_rid(device_t pcib, uint16_t rid, int *bus, int *slot,
+    int *func)
+{
+
+	*bus = PCI_RID2BUS(rid);
+	*slot = PCI_RID2SLOT(rid);
+	*func = PCI_RID2FUNC(rid);
+}
+

Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h
==============================================================================
--- user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h	Sun Jan  3 06:12:53 2016	(r293074)
+++ user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h	Sun Jan  3 06:25:22 2016	(r293075)
@@ -68,6 +68,10 @@
 #define PCI_RID2SLOT(rid) (((rid) >> PCI_RID_SLOT_SHIFT) & PCI_SLOTMAX)
 #define PCI_RID2FUNC(rid) (((rid) >> PCI_RID_FUNC_SHIFT) & PCI_FUNCMAX)
 
+#define PCIE_ARI_RID2SLOT(rid) (0)
+#define PCIE_ARI_RID2FUNC(rid) \
+    (((rid) >> PCI_RID_FUNC_SHIFT) & PCIE_ARI_FUNCMAX)
+
 #define PCIE_ARI_SLOT(func) (((func) >> PCI_RID_SLOT_SHIFT) & PCI_SLOTMAX)
 #define PCIE_ARI_FUNC(func) (((func) >> PCI_RID_FUNC_SHIFT) & PCI_FUNCMAX)
 


More information about the svn-src-user mailing list