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

Subversion Repositories pcie_ds_dma

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /pcie_ds_dma
    from Rev 55 to Rev 56
    Reverse comparison

Rev 55 → Rev 56

/trunk/soft/linux/driver/pexdrv/hardware.c
300,57 → 300,26
 
//--------------------------------------------------------------------
 
void TimeoutTimerCallback(unsigned long arg )
{
struct pex_device *pDevice = (struct pex_device*) arg;
atomic_set(&pDevice->m_IsTimeout, 1);
}
 
//--------------------------------------------------------------------
 
void SetRelativeTimer ( struct timer_list *timer, int timeout, void *data )
{
struct pex_device *dev = (struct pex_device*)data;
 
if (!dev)
return;
 
atomic_set( &dev->m_IsTimeout, 0 );
 
timer->data = ( unsigned long ) data;
timer->function = TimeoutTimerCallback;
timer->expires = ( jiffies + timeout * HZ / 1000);
 
add_timer ( timer );
}
 
//--------------------------------------------------------------------
 
void CancelTimer ( struct timer_list *timer )
{
del_timer( timer );
}
 
//--------------------------------------------------------------------
 
int WaitCmdReady(struct pex_device *brd, u32 AdmNumber, u32 StatusAddress)
{
u32 cmd_rdy;
u32 cmd_rdy = 0;
u32 timeout = 1;
u32 pass = 0;
 
atomic_set(&brd->m_IsTimeout, 0);
 
SetRelativeTimer(&brd->m_TimeoutTimer, 1000, (void*)brd); // wait 1 sec
 
do {
while(1) {
cmd_rdy = ReadAmbReg(brd, AdmNumber, StatusAddress);
cmd_rdy &= AMB_statCMDRDY; //HOST_statCMDRDY;
} while(!atomic_read(&brd->m_IsTimeout) && !cmd_rdy);
 
CancelTimer(&brd->m_TimeoutTimer);
if(cmd_rdy)
break;
 
if (atomic_read(&brd->m_IsTimeout))
return -1;
wait_event_interruptible_timeout(brd->m_WaitQueue, (cmd_rdy != 0), msecs_to_jiffies(timeout));
 
pass++;
 
if(pass > 99)
return -1;
}
return 0;
}
 
/trunk/soft/linux/driver/pexdrv/pexmodule.c
534,7 → 534,6
spin_lock_init(&brd->m_BoardLock);
atomic_set(&brd->m_TotalIRQ, 0);
init_waitqueue_head(&brd->m_WaitQueue);
init_timer(&brd->m_TimeoutTimer);
spin_lock_init(&brd->m_MemListLock);
atomic_set(&brd->m_MemListCount, 0);
INIT_LIST_HEAD(&brd->m_MemList);
/trunk/soft/linux/driver/pexdrv/pexmodule.h
55,7 → 55,6
u32 m_FlgIrqEnbl;
u32 m_BoardIndex;
wait_queue_head_t m_WaitQueue;
struct timer_list m_TimeoutTimer;
atomic_t m_IsTimeout;
struct cdev m_cdev;
 

powered by: WebSVN 2.1.0

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