OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [common/] [pex/] [pex_board.cpp] - Diff between revs 35 and 54

Show entire file | Details | Blame | View Log

Rev 35 Rev 54
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;
    }
    }
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.