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