8template<
class T,
int size>
12 T m_buffer0[size] __attribute__ ((aligned (128)));
13 T m_buffer1[size] __attribute__ ((aligned (128)));
22 unsigned int m_dmaTag;
25 bool isPending()
const {
return m_dmaPending;}
31 void backBufferDmaGet(uint64_t ea,
unsigned int numBytes,
unsigned int tag);
32 void backBufferDmaPut(uint64_t ea,
unsigned int numBytes,
unsigned int tag);
43template<
class T,
int size>
44DoubleBuffer<T,size>::DoubleBuffer()
49template<
class T,
int size>
50void DoubleBuffer<T,size>::init()
52 this->m_dmaPending =
false;
53 this->m_frontBuffer = &this->m_buffer0[0];
54 this->m_backBuffer = &this->m_buffer1[0];
57template<
class T,
int size>
59DoubleBuffer<T,size>::backBufferDmaGet(uint64_t ea,
unsigned int numBytes,
unsigned int tag)
63 cellDmaLargeGet(m_backBuffer, ea, numBytes, tag, 0, 0);
66template<
class T,
int size>
68DoubleBuffer<T,size>::backBufferDmaPut(uint64_t ea,
unsigned int numBytes,
unsigned int tag)
72 cellDmaLargePut(m_backBuffer, ea, numBytes, tag, 0, 0);
75template<
class T,
int size>
77DoubleBuffer<T,size>::getFront()
82template<
class T,
int size>
84DoubleBuffer<T,size>::getBack()
89template<
class T,
int size>
91DoubleBuffer<T,size>::swapBuffers()
95 cellDmaWaitTagStatusAll(1<<m_dmaTag);
99 T *tmp = m_backBuffer;
100 m_backBuffer = m_frontBuffer;
103 return m_frontBuffer;