diff options
Diffstat (limited to 'drivers/dahdi')
-rw-r--r-- | drivers/dahdi/voicebus/voicebus.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/drivers/dahdi/voicebus/voicebus.c b/drivers/dahdi/voicebus/voicebus.c index f922484..d133006 100644 --- a/drivers/dahdi/voicebus/voicebus.c +++ b/drivers/dahdi/voicebus/voicebus.c @@ -717,11 +717,7 @@ vb_submit_rxb(struct voicebus *vb, struct vbb *vbb) return 0; } -/** - * voicebus_transmit - Queue a buffer on the hardware descriptor ring. - * - */ -int voicebus_transmit(struct voicebus *vb, struct vbb *vbb) +static int __voicebus_transmit(struct voicebus *vb, struct vbb *vbb) { struct voicebus_descriptor *d; struct voicebus_descriptor_list *dl = &vb->txd; @@ -746,6 +742,17 @@ int voicebus_transmit(struct voicebus *vb, struct vbb *vbb) atomic_inc(&dl->count); return 0; } + +/** + * voicebus_transmit - Queue a buffer on the hardware descriptor ring. + * + */ +int voicebus_transmit(struct voicebus *vb, struct vbb *vbb) +{ + int res = __voicebus_transmit(vb, vbb); + __vb_setctl(vb, 0x0008, 0x00000000); + return res; +} EXPORT_SYMBOL(voicebus_transmit); @@ -810,8 +817,9 @@ static void setup_descriptors(struct voicebus *vb) while (!list_empty(&buffers)) { vbb = list_entry(buffers.next, struct vbb, entry); list_del_init(&vbb->entry); - voicebus_transmit(vb, vbb); + __voicebus_transmit(vb, vbb); } + __vb_setctl(vb, 0x0008, 0x00000000); vb_enable_deferred(vb); } @@ -1281,8 +1289,9 @@ static void vb_tasklet_boot(unsigned long data) while (!list_empty(&buffers)) { vbb = list_entry(buffers.next, struct vbb, entry); list_del(&vbb->entry); - voicebus_transmit(vb, vbb); + __voicebus_transmit(vb, vbb); } + __vb_setctl(vb, 0x0008, 0x00000000); /* If there may still be buffers in the descriptor rings, reschedule * ourself to run again. We essentially yield here to allow any other @@ -1356,8 +1365,9 @@ static void vb_tasklet_hx8(unsigned long data) while (!list_empty(&buffers)) { vbb = list_entry(buffers.next, struct vbb, entry); list_del(&vbb->entry); - voicebus_transmit(vb, vbb); + __voicebus_transmit(vb, vbb); } + __vb_setctl(vb, 0x0008, 0x00000000); /* Print any messages about soft latency bumps after we fix the transmit * descriptor ring. Otherwise it's possible to take so much time @@ -1501,8 +1511,9 @@ static void vb_tasklet_normal(unsigned long data) while (!list_empty(&buffers)) { vbb = list_entry(buffers.next, struct vbb, entry); list_del(&vbb->entry); - voicebus_transmit(vb, vbb); + __voicebus_transmit(vb, vbb); } + __vb_setctl(vb, 0x0008, 0x00000000); /* Print any messages about soft latency bumps after we fix the transmit * descriptor ring. Otherwise it's possible to take so much time |