summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/spw
diff options
context:
space:
mode:
authorArvid Bjorkengren <arvid@gaisler.com>2012-09-25 15:26:00 +0200
committerDaniel Hellstrom <daniel@gaisler.com>2015-04-17 01:10:18 +0200
commit949d0d620674828c9d06cc399b02b79212934bab (patch)
tree87b849e35852b161a888b074f6560c0abbe8b8fa /c/src/lib/libbsp/sparc/shared/spw
parentAPBUART: fix GRMON -u support for older UARTs (diff)
downloadrtems-949d0d620674828c9d06cc399b02b79212934bab.tar.bz2
GRSPW: Make sure buffers are 64-bit aligned
This is to improve odds of getting a fast memcpy-operation.
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/spw')
-rw-r--r--c/src/lib/libbsp/sparc/shared/spw/grspw.c11
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;