Line 49... |
Line 49... |
int error = 0;
|
int error = 0;
|
|
|
if(fd > 0)
|
if(fd > 0)
|
return 0;
|
return 0;
|
|
|
fd = open(name, S_IROTH | S_IWOTH );
|
//fd = open(name, S_IROTH | S_IWOTH );
|
|
fd = open(name, 0666 );
|
if(fd < 0) {
|
if(fd < 0) {
|
std::cerr << __FUNCTION__ << "(): " << " error open device: " << name << endl;
|
std::cerr << __FUNCTION__ << "(): " << " error open device: " << name << endl;
|
goto do_out;
|
goto do_out;
|
}
|
}
|
|
|
Line 180... |
Line 181... |
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
int pex_board::core_reset()
|
int pex_board::core_reset()
|
{
|
{
|
|
/* for test read() syscall in userspace DMA mode
|
|
void *data = NULL;
|
|
size_t size = sysconf(_SC_PAGESIZE)*16;
|
|
size_t align = sysconf(_SC_PAGESIZE);
|
|
int res = posix_memalign(&data, align, size);
|
|
if(res < 0) {
|
|
fprintf(stderr, "error in posix_memalign()\n");
|
|
return -1;
|
|
}
|
|
|
|
res = read(fd, data, size);
|
|
if(res < 0) {
|
|
fprintf(stderr, "error in read()\n");
|
|
return -1;
|
|
}
|
|
|
|
free(data);
|
|
*/
|
return 0;
|
return 0;
|
}
|
}
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
Line 362... |
Line 381... |
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
u32 pex_board::core_reg_peek_dir( u32 trd, u32 reg )
|
u32 pex_board::core_reg_peek_dir( u32 trd, u32 reg )
|
{
|
{
|
if( (trd>15) || (reg>3) )
|
if( (trd>15) || (reg>3) ) {
|
|
fprintf(stderr, "%s(): Invalid arguments.\n", __FUNCTION__);
|
return -1;
|
return -1;
|
|
}
|
|
|
u32 offset = trd*0x4000 + reg*0x1000;
|
u32 offset = trd*0x4000 + reg*0x1000;
|
u32 ret = *(bar1 + offset/4);
|
u32 ret = *(bar1 + offset/4);
|
|
|
return ret;
|
return ret;
|
Line 375... |
Line 396... |
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
u32 pex_board::core_reg_peek_ind( u32 trd, u32 reg )
|
u32 pex_board::core_reg_peek_ind( u32 trd, u32 reg )
|
{
|
{
|
if( (trd>15) || (reg>0x3FF) )
|
if( (trd>15) || (reg>0x3FF) ) {
|
|
fprintf(stderr, "%s(): Invalid arguments.\n", __FUNCTION__);
|
return -1;
|
return -1;
|
|
}
|
|
|
u32 status;
|
u32 status;
|
u32 Status = trd*0x4000;
|
u32 Status = trd*0x4000;
|
u32 CmdAdr = trd*0x4000 + 0x2000;
|
u32 CmdAdr = trd*0x4000 + 0x2000;
|
u32 CmdData = trd*0x4000 + 0x3000;
|
u32 CmdData = trd*0x4000 + 0x3000;
|
Line 409... |
Line 432... |
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
void pex_board::core_reg_poke_dir( u32 trd, u32 reg, u32 val )
|
void pex_board::core_reg_poke_dir( u32 trd, u32 reg, u32 val )
|
{
|
{
|
if( (trd>15) || (reg>3) )
|
if( (trd>15) || (reg>3) ) {
|
|
fprintf(stderr, "%s(): Invalid arguments.\n", __FUNCTION__);
|
return;
|
return;
|
|
}
|
|
|
u32 offset = trd*0x4000+reg*0x1000;
|
u32 offset = trd*0x4000+reg*0x1000;
|
|
|
bar1[offset/4]=val;
|
bar1[offset/4]=val;
|
}
|
}
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
void pex_board::core_reg_poke_ind( u32 trd, u32 reg, u32 val )
|
void pex_board::core_reg_poke_ind( u32 trd, u32 reg, u32 val )
|
{
|
{
|
if( (trd>15) || (reg>0x3FF) )
|
if( (trd>15) || (reg>0x3FF) ) {
|
|
fprintf(stderr, "%s(): Invalid arguments.\n", __FUNCTION__);
|
return;
|
return;
|
|
}
|
|
|
u32 status;
|
u32 status;
|
u32 Status = trd*0x4000;
|
u32 Status = trd*0x4000;
|
u32 CmdAdr = trd*0x4000 + 0x2000;
|
u32 CmdAdr = trd*0x4000 + 0x2000;
|
u32 CmdData = trd*0x4000 + 0x3000;
|
u32 CmdData = trd*0x4000 + 0x3000;
|
Line 489... |
Line 516... |
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
u32 pex_board::core_block_read( u32 nb, u32 reg )
|
u32 pex_board::core_block_read( u32 nb, u32 reg )
|
{
|
{
|
if( (nb>7) || (reg>31) )
|
if( (nb>7) || (reg>31) ) {
|
|
fprintf(stderr, "%s(): Invalid arguments.\n", __FUNCTION__);
|
return -1;
|
return -1;
|
|
}
|
|
|
u32 ret = 0;
|
u32 ret = 0;
|
|
|
ret=*(bar0+nb*64+reg*2);
|
ret=*(bar0+nb*64+reg*2);
|
if( reg<8 )
|
if( reg<8 )
|
Line 503... |
Line 532... |
return ret;
|
return ret;
|
}
|
}
|
|
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
u32 pex_board::core_alloc(int DmaChan, BRDctrl_StreamCBufAlloc* sSCA)
|
u32 pex_board::core_allocate_memory(int DmaChan, BRDctrl_StreamCBufAlloc* sSCA)
|
{
|
{
|
m_DescrSize[DmaChan] = sizeof(AMB_MEM_DMA_CHANNEL) + (sSCA->blkNum - 1) * sizeof(void*);
|
m_DescrSize[DmaChan] = sizeof(AMB_MEM_DMA_CHANNEL) + (sSCA->blkNum - 1) * sizeof(void*);
|
m_Descr[DmaChan] = (AMB_MEM_DMA_CHANNEL*) new u8[m_DescrSize[DmaChan]];
|
m_Descr[DmaChan] = (AMB_MEM_DMA_CHANNEL*) new u8[m_DescrSize[DmaChan]];
|
|
|
m_Descr[DmaChan]->DmaChanNum = DmaChan;
|
m_Descr[DmaChan]->DmaChanNum = DmaChan;
|
Line 660... |
Line 689... |
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
|
|
u32 pex_board::core_free_memory(int DmaChan)
|
u32 pex_board::core_free_memory(int DmaChan)
|
{
|
{
|
for(u32 iBlk = 0; iBlk < m_Descr[DmaChan]->BlockCnt; iBlk++) {
|
for(u32 iBlk = 0; iBlk < m_Descr[DmaChan]->BlockCnt; iBlk++) {
|
|
|
munmap( m_Descr[DmaChan]->pBlock[iBlk], m_Descr[DmaChan]->BlockSize );
|
munmap( m_Descr[DmaChan]->pBlock[iBlk], m_Descr[DmaChan]->BlockSize );
|
}
|
}
|
|
|
|
fprintf(stderr, "%s(): Unmap blocks - OK\n", __FUNCTION__ );
|
|
|
munmap( m_Descr[DmaChan]->pStub, sizeof(AMB_STUB) );
|
munmap( m_Descr[DmaChan]->pStub, sizeof(AMB_STUB) );
|
|
|
|
fprintf(stderr, "%s(): Unmap stub - OK\n", __FUNCTION__ );
|
|
|
if(ioctl(fd, IOCTL_AMB_FREE_MEMIO, m_Descr[DmaChan]) < 0) {
|
if(ioctl(fd, IOCTL_AMB_FREE_MEMIO, m_Descr[DmaChan]) < 0) {
|
fprintf(stderr, "%s(): Error free memory\n", __FUNCTION__ );
|
fprintf(stderr, "%s(): Error free memory\n", __FUNCTION__ );
|
return -1;
|
return -1;
|
}
|
}
|
|
|