diff options
author | Arvid Bjorkengren <arvid@gaisler.com> | 2012-09-25 15:26:00 +0200 |
---|---|---|
committer | Daniel Hellstrom <daniel@gaisler.com> | 2015-04-17 01:10:18 +0200 |
commit | 949d0d620674828c9d06cc399b02b79212934bab (patch) | |
tree | 87b849e35852b161a888b074f6560c0abbe8b8fa | |
parent | APBUART: fix GRMON -u support for older UARTs (diff) | |
download | rtems-949d0d620674828c9d06cc399b02b79212934bab.tar.bz2 |
GRSPW: Make sure buffers are 64-bit aligned
This is to improve odds of getting a fast memcpy-operation.
-rw-r--r-- | c/src/lib/libbsp/sparc/shared/spw/grspw.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw.c b/c/src/lib/libbsp/sparc/shared/spw/grspw.c index 83f3b971cd..b6ee255d36 100644 --- a/c/src/lib/libbsp/sparc/shared/spw/grspw.c +++ b/c/src/lib/libbsp/sparc/shared/spw/grspw.c @@ -112,6 +112,7 @@ typedef struct { /* statistics */ spw_stats stat; + unsigned int _ptr_rxbuf0; char *ptr_rxbuf0; char *ptr_txdbuf0; char *ptr_txhbuf0; @@ -522,6 +523,7 @@ int grspw_device_init(GRSPW_DEV *pDev) pDev->txbufcnt = SPACEWIRE_TXBUFS_NR; pDev->rxbufcnt = SPACEWIRE_RXBUFS_NR; + pDev->_ptr_rxbuf0 = 0; pDev->ptr_rxbuf0 = 0; pDev->ptr_txdbuf0 = 0; pDev->ptr_txhbuf0 = 0; @@ -617,10 +619,11 @@ static int grspw_buffer_alloc(GRSPW_DEV *pDev) pDev->ptr_rxbuf0 = pDev->rx_dma_area; } } else { - if (pDev->ptr_rxbuf0) { - free(pDev->ptr_rxbuf0); + if (pDev->_ptr_rxbuf0) { + free(pDev->_ptr_rxbuf0); } - pDev->ptr_rxbuf0 = (char *) malloc(pDev->rxbufsize * pDev->rxbufcnt); + pDev->_ptr_rxbuf0 = (unsigned int) malloc(pDev->rxbufsize * pDev->rxbufcnt+4); + pDev->ptr_rxbuf0 = (char *)((pDev->_ptr_rxbuf0+7)&~7); if ( !pDev->ptr_rxbuf0 ) return 1; } @@ -1242,7 +1245,7 @@ static rtems_device_driver grspw_control( } /* Save new buffer sizes */ - pDev->rxbufsize = ps->rxsize; + pDev->rxbufsize = ((ps->rxsize+7)&~7); pDev->txdbufsize = ps->txdsize; pDev->txhbufsize = ps->txhsize; pDev->config.rxmaxlen = pDev->rxbufsize; |