socsvn commit: r304243 - soc2016/vincenzo/head/sys/dev/netmap

vincenzo at FreeBSD.org vincenzo at FreeBSD.org
Tue May 31 10:22:29 UTC 2016


Author: vincenzo
Date: Tue May 31 10:22:27 2016
New Revision: 304243
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=304243

Log:
   freebsd: ptnet: per-queue data structure

Modified:
  soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c

Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c
==============================================================================
--- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Tue May 31 09:24:16 2016	(r304242)
+++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Tue May 31 10:22:27 2016	(r304243)
@@ -90,6 +90,14 @@
 #error "No support for on-device CSB"
 #endif
 
+struct ptnet_softc;
+
+struct ptnet_queue {
+	struct ptnet_softc *sc;
+	struct resource *irq;
+	int kring_id;
+};
+
 struct ptnet_softc {
 	device_t dev;
 	struct ifnet		*ifp;
@@ -106,7 +114,7 @@
 	struct resource		*msix_mem;
 
 	unsigned int		num_rings;
-
+	struct ptnet_queue	*queues;
 	struct ptnet_csb	*csb;
 };
 
@@ -183,6 +191,7 @@
 	struct ifnet *ifp;
 	uint32_t macreg;
 	int err, rid;
+	int i;
 
 	device_printf(dev, "%s\n", __func__);
 
@@ -216,6 +225,24 @@
 	num_rx_rings = bus_read_4(sc->iomem, PTNET_IO_NUM_RX_RINGS);
 	sc->num_rings = num_tx_rings + num_rx_rings;
 
+	/* Allocate per-queue data structures. */
+	sc->queues = malloc(sizeof(struct ptnet_queue) * sc->num_rings,
+			    M_DEVBUF, M_NOWAIT | M_ZERO);
+	if (sc->queues == NULL) {
+		err = ENOMEM;
+		goto err_path;
+	}
+
+	for (i = 0; i < sc->num_rings; i++) {
+		struct ptnet_queue *pq = sc->queues + i;
+
+		pq->sc = sc;
+		pq->kring_id = i;
+		if (i >= num_tx_rings) {
+			pq->kring_id -= num_tx_rings;
+		}
+	}
+
 	/* Allocate CSB and carry out CSB allocation protocol (CSBBAH first,
 	 * then CSBBAL). */
 	sc->csb = malloc(sizeof(struct ptnet_csb), M_DEVBUF,
@@ -311,6 +338,11 @@
 		sc->csb = NULL;
 	}
 
+	if (sc->queues) {
+		free(sc->queues, M_DEVBUF);
+		sc->queues = NULL;
+	}
+
 	if (sc->iomem) {
 		bus_release_resource(dev, SYS_RES_IOPORT,
 				     PCIR_BAR(PTNETMAP_IO_PCI_BAR), sc->iomem);


More information about the svn-soc-all mailing list