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/trunk/soft/linux/driver/pexdrv
- from Rev 54 to Rev 56
- ↔ Reverse comparison
Rev 54 → Rev 56
/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; |
} |
|
/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); |
/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; |
|