diff options
author | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-05-27 09:55:06 +0200 |
---|---|---|
committer | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-07-29 11:19:14 +0200 |
commit | 36b588eb8bb74677cdbe1728cbdc96890fd818bb (patch) | |
tree | 919c28e34f0d9b7479deb6734e8db5881cf238c8 | |
parent | 4820ccecc92f850333dbf01cc2dedfa31329e474 (diff) |
rtwn_usb: Make sure buffers are cache aligned
-rw-r--r-- | freebsd/sys/dev/rtwn/usb/rtwn_usb_attach.c | 11 | ||||
-rw-r--r-- | freebsd/sys/dev/rtwn/usb/rtwn_usb_tx.c | 7 |
2 files changed, 18 insertions, 0 deletions
diff --git a/freebsd/sys/dev/rtwn/usb/rtwn_usb_attach.c b/freebsd/sys/dev/rtwn/usb/rtwn_usb_attach.c index 8626d0a3..fad41f36 100644 --- a/freebsd/sys/dev/rtwn/usb/rtwn_usb_attach.c +++ b/freebsd/sys/dev/rtwn/usb/rtwn_usb_attach.c @@ -37,6 +37,10 @@ __FBSDID("$FreeBSD$"); #include <sys/endian.h> #include <sys/linker.h> #include <sys/kdb.h> +#ifdef __rtems__ +#include <machine/rtems-bsd-cache.h> +#include <rtems/malloc.h> +#endif /* __rtems__ */ #include <net/if.h> #include <net/if_var.h> @@ -115,7 +119,14 @@ rtwn_usb_alloc_list(struct rtwn_softc *sc, struct rtwn_data data[], for (i = 0; i < ndata; i++) { struct rtwn_data *dp = &data[i]; dp->m = NULL; +#if defined(__rtems__) && defined(CPU_DATA_CACHE_ALIGNMENT) + maxsz = maxsz + (CPU_DATA_CACHE_ALIGNMENT - 1) & + ~(CPU_DATA_CACHE_ALIGNMENT - 1); + dp->buf = rtems_heap_allocate_aligned_with_boundary(maxsz, + CPU_DATA_CACHE_ALIGNMENT, 0); +#else /* __rtems__ */ dp->buf = malloc(maxsz, M_USBDEV, M_NOWAIT); +#endif /* __rtems__ */ if (dp->buf == NULL) { device_printf(sc->sc_dev, "could not allocate buffer\n"); diff --git a/freebsd/sys/dev/rtwn/usb/rtwn_usb_tx.c b/freebsd/sys/dev/rtwn/usb/rtwn_usb_tx.c index 61f0ba43..14762c0c 100644 --- a/freebsd/sys/dev/rtwn/usb/rtwn_usb_tx.c +++ b/freebsd/sys/dev/rtwn/usb/rtwn_usb_tx.c @@ -64,6 +64,10 @@ __FBSDID("$FreeBSD$"); #include <dev/rtwn/usb/rtwn_usb_reg.h> #include <dev/rtwn/usb/rtwn_usb_tx.h> +#ifdef __rtems__ +#include <machine/rtems-bsd-cache.h> +#endif /* __rtems__ */ + static struct rtwn_data * _rtwn_usb_getbuf(struct rtwn_usb_softc *); static struct rtwn_data * rtwn_usb_getbuf(struct rtwn_usb_softc *); static void rtwn_usb_txeof(struct rtwn_usb_softc *, @@ -170,6 +174,9 @@ tr_setup: if (data->ni == NULL && RTWN_CHIP_HAS_BCNQ1(sc)) rtwn_switch_bcnq(sc, data->id); usbd_xfer_set_frame_data(xfer, 0, data->buf, data->buflen); +#if defined(__rtems__) && defined(CPU_DATA_CACHE_ALIGNMENT) + usbd_xfer_frame_allow_cache_line_blow_up(xfer, 0); +#endif /* __rtems__ */ usbd_transfer_submit(xfer); if (sc->sc_ratectl != RTWN_RATECTL_NET80211) sc->sc_tx_n_active++; |