diff options
author | Shaun Ruffell <sruffell@digium.com> | 2010-02-10 22:36:03 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2010-02-10 22:36:03 +0000 |
commit | 8d01aa4ca33ff7e0ffc44d473ac99e61e195d86a (patch) | |
tree | 8813691073bf5c2ccf44a69444a6ad524a10e30d /drivers/dahdi/voicebus/voicebus.h | |
parent | 36183ddd5d9980d98c80b0196e10702ac3b21fb1 (diff) |
voicebus: Improve hard underrun handling.
When there is a hard underrun, or in other words interrupts are held off for so
long that the board completely runs out of transmit descriptors, it was too easy
for the driver to be in a 'confused' state about the descriptors. This change
has the driver cleanup and reset the descriptor ring in this case so that we're
not racing against the interface while we resume normal operation.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@8026 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/voicebus/voicebus.h')
-rw-r--r-- | drivers/dahdi/voicebus/voicebus.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/dahdi/voicebus/voicebus.h b/drivers/dahdi/voicebus/voicebus.h index a038b91..be713c6 100644 --- a/drivers/dahdi/voicebus/voicebus.h +++ b/drivers/dahdi/voicebus/voicebus.h @@ -58,6 +58,7 @@ struct voicebus; struct voicebus_operations { void (*handle_receive)(struct voicebus *vb, void *vbb); void (*handle_transmit)(struct voicebus *vb, void *vbb); + void (*handle_error)(struct voicebus *vb); }; /** @@ -94,6 +95,7 @@ struct voicebus { #elif VOICEBUS_DEFERRED == TIMER struct timer_list timer; #endif + struct work_struct underrun_work; const struct voicebus_operations *ops; struct completion stopped_completion; unsigned long flags; |