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

vincenzo at FreeBSD.org vincenzo at FreeBSD.org
Fri May 27 14:39:42 UTC 2016


Author: vincenzo
Date: Fri May 27 14:39:41 2016
New Revision: 304038
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=304038

Log:
  ptnet: CSB allocation

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	Fri May 27 12:02:12 2016	(r304037)
+++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Fri May 27 14:39:41 2016	(r304038)
@@ -47,6 +47,8 @@
 #include <machine/smp.h>
 
 #include <vm/uma.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
 
 #include <net/ethernet.h>
 #include <net/if.h>
@@ -209,13 +211,24 @@
 	num_tx_rings = bus_read_4(sc->iomem, PTNET_IO_NUM_TX_RINGS);
 	num_rx_rings = bus_read_4(sc->iomem, PTNET_IO_NUM_RX_RINGS);
 #endif
-	sc->csb = malloc(sizeof(struct ptnet_csb), M_DEVBUF, M_NOWAIT | M_ZERO);
+	/* Allocate CSB and carry out CSB allocation protocol (CSBBAH first,
+	 * then CSBBAL). */
+	sc->csb = malloc(sizeof(struct ptnet_csb), M_DEVBUF,
+			 M_NOWAIT | M_ZERO);
 	if (sc->csb == NULL) {
 		device_printf(dev, "Failed to allocate CSB\n");
 		err = ENOMEM;
 		goto err_path;
 	}
 
+	{
+		vm_paddr_t paddr = vtophys(sc->csb);
+
+		bus_write_4(sc->iomem, PTNET_IO_CSBBAH,
+			    (paddr >> 32) & 0xffffffff);
+		bus_write_4(sc->iomem, PTNET_IO_CSBBAL, paddr & 0xffffffff);
+	}
+
 	/* Setup Ethernet interface. */
 	sc->ifp = ifp = if_alloc(IFT_ETHER);
 	if (ifp == NULL) {
@@ -272,6 +285,8 @@
 	}
 
 	if (sc->csb) {
+		bus_write_4(sc->iomem, PTNET_IO_CSBBAH, 0);
+		bus_write_4(sc->iomem, PTNET_IO_CSBBAL, 0);
 		free(sc->csb, M_DEVBUF);
 		sc->csb = NULL;
 	}


More information about the svn-soc-all mailing list