diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-06-27 12:51:07 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-23 09:24:07 +0200 |
commit | e3dc39ee0cc025cb66baae8ab5d9ccb7bdbcd57c (patch) | |
tree | 9882bd6803ca766c585d19c8f7727bbc79c4a83c | |
parent | linux: Move upper_32_bits() and lower_32_bits() (diff) | |
download | rtems-libbsd-e3dc39ee0cc025cb66baae8ab5d9ccb7bdbcd57c.tar.bz2 |
dpaa: Add <soc/fsl/dpaa.h>
-rw-r--r-- | linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 31 | ||||
-rw-r--r-- | rtemsbsd/powerpc/include/soc/fsl/dpaa.h | 53 | ||||
-rw-r--r-- | rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c | 11 |
3 files changed, 95 insertions, 0 deletions
diff --git a/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index 3698101a..e010f5dc 100644 --- a/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -56,6 +56,8 @@ #include <linux/percpu.h> #include <linux/dma-mapping.h> #include <linux/sort.h> +#else /* __rtems__ */ +#include <soc/fsl/dpaa.h> #endif /* __rtems__ */ #include <soc/fsl/bman.h> #include <soc/fsl/qman.h> @@ -1606,6 +1608,35 @@ release_previous_buffs: 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) { diff --git a/rtemsbsd/powerpc/include/soc/fsl/dpaa.h b/rtemsbsd/powerpc/include/soc/fsl/dpaa.h new file mode 100644 index 00000000..1e9a6762 --- /dev/null +++ b/rtemsbsd/powerpc/include/soc/fsl/dpaa.h @@ -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 */ diff --git a/rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c b/rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c index e5c11834..c71a73c4 100644 --- a/rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c +++ b/rtemsbsd/sys/powerpc/drivers/net/ethernet/freescale/dpaa/if_fmanmac.c @@ -44,6 +44,8 @@ #include <linux/phy.h> +#include <soc/fsl/dpaa.h> + #include "../../../../../../../../linux/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h" #define FMAN_MAC_LOCK(sc) mtx_lock(&(sc)->mtx) @@ -579,3 +581,12 @@ void dpaa_cleanup_tx_fd(struct ifnet *ifp, const struct qm_fd *fd) m_freem(sgt->m); 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)); +} |