Index: linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
===================================================================
--- linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c	(revision 9789434e2127185fad5ad2fa4f3eb219c6c698ec)
+++ linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c	(revision e3dc39ee0cc025cb66baae8ab5d9ccb7bdbcd57c)
@@ -57,4 +57,6 @@
 #include <linux/dma-mapping.h>
 #include <linux/sort.h>
+#else /* __rtems__ */
+#include <soc/fsl/dpaa.h>
 #endif /* __rtems__ */
 #include <soc/fsl/bman.h>
@@ -1607,4 +1609,33 @@
 	return 0;
 }
+#ifdef __rtems__
+void
+dpaa_recycle_mcluster(struct dpaa_priv *dpaa_priv,
+    dpaa_buffer_recycle_context *rc, struct mbuf *m)
+{
+	size_t i;
+	dma_addr_t addr;
+
+	i = rc->count;
+	m->m_data = m->m_ext.ext_buf;
+	*(struct mbuf **)(mtod(m, char *) + DPAA_MBUF_POINTER_OFFSET) = m;
+	addr = mtod(m, dma_addr_t);
+	rc->bmb[i].data = 0;
+	bm_buffer_set64(&rc->bmb[i], addr);
+
+	if (i < ARRAY_SIZE(rc->bmb) - 1) {
+		rc->count = i + 1;
+	} else {
+		struct dpaa_bp *dpaa_bp;
+		int *countptr;
+
+		rc->count = 0;
+		dpaa_bp = dpaa_priv->dpaa_bps[0];
+		countptr = this_cpu_ptr(dpaa_bp->percpu_count);
+		*countptr += dpaa_bman_release(dpaa_bp, rc->bmb,
+		    ARRAY_SIZE(rc->bmb));
+	}
+}
+#endif /* __rtems__ */
 
 static int dpaa_bp_seed(struct dpaa_bp *dpaa_bp)
Index: rtemsbsd/powerpc/include/soc/fsl/dpaa.h
===================================================================
--- rtemsbsd/powerpc/include/soc/fsl/dpaa.h	(revision e3dc39ee0cc025cb66baae8ab5d9ccb7bdbcd57c)
+++ rtemsbsd/powerpc/include/soc/fsl/dpaa.h	(revision e3dc39ee0cc025cb66baae8ab5d9ccb7bdbcd57c)
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2017 embedded brains GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _SOC_FSL_DPAA_H
+#define	_SOC_FSL_DPAA_H
+
+#include <sys/cdefs.h>
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#include <soc/fsl/bman.h>
+
+__BEGIN_DECLS
+
+struct dpaa_priv;
+struct ifnet;
+struct mbuf;
+
+struct dpaa_priv *dpaa_get_priv_of_ifp(struct ifnet *);
+
+typedef struct {
+	size_t count;
+	struct bm_buffer bmb[8];
+} dpaa_buffer_recycle_context;
+
+void dpaa_recycle_mcluster(struct dpaa_priv *,
+    dpaa_buffer_recycle_context *, struct mbuf *);
+
+__END_DECLS
+
+#endif /* _SOC_FSL_DPAA_H */
Index: rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c
===================================================================
--- rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c	(revision 9789434e2127185fad5ad2fa4f3eb219c6c698ec)
+++ rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c	(revision e3dc39ee0cc025cb66baae8ab5d9ccb7bdbcd57c)
@@ -45,4 +45,6 @@
 #include <linux/phy.h>
 
+#include <soc/fsl/dpaa.h>
+
 #include "../../../../../../../../linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h"
 
@@ -580,2 +582,11 @@
 	uma_zfree(sc->sgt_zone, sgt);
 }
+
+struct dpaa_priv *
+dpaa_get_priv_of_ifp(struct ifnet *ifp)
+{
+	struct fman_mac_softc *sc;
+
+	sc = ifp->if_softc;
+	return (netdev_priv(&sc->mac_dev.net_dev));
+}
