summaryrefslogtreecommitdiff
path: root/wctdm.c
diff options
context:
space:
mode:
authormarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2003-05-15 02:42:50 +0000
committermarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2003-05-15 02:42:50 +0000
commit767135605bbaeb8c53e61e8dabd5d8fc55db2632 (patch)
tree4d2fb0629d3dfd5574c52e8fc71c674f1c8df7cc /wctdm.c
parent5b864019c5aeccf32d5ab83a856360e46e1436d9 (diff)
Turn on watchdog, enable for FXS
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@181 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'wctdm.c')
-rwxr-xr-xwctdm.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/wctdm.c b/wctdm.c
index 6ecf724..56d91b7 100755
--- a/wctdm.c
+++ b/wctdm.c
@@ -880,6 +880,13 @@ static int wcfxs_open(struct zt_chan *chan)
return 0;
}
+static int wcfxs_watchdog(struct zt_span *span, int event)
+{
+ printk("FXS: Restarting DMA\n");
+ wcfxs_restart_dma(span->pvt);
+ return 0;
+}
+
static int wcfxs_close(struct zt_chan *chan)
{
struct wcfxs *wc = chan->pvt;
@@ -949,6 +956,7 @@ static int wcfxs_initialize(struct wcfxs *wc)
wc->span.close = wcfxs_close;
wc->span.flags = ZT_FLAG_RBS;
wc->span.ioctl = wcfxs_ioctl;
+ wc->span.watchdog = wcfxs_watchdog;
init_waitqueue_head(&wc->span.maintq);
wc->span.pvt = wc;
@@ -1058,20 +1066,19 @@ static void wcfxs_enable_interrupts(struct wcfxs *wc)
outb(0x00, wc->ioaddr + WC_MASK1);
}
-static void wcfxs_start_dma(struct wcfxs *wc)
+static void wcfxs_restart_dma(struct wcfxs *wc)
{
/* Reset Master and TDM */
- outb(0x0f, wc->ioaddr + WC_CNTL);
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(1);
outb(0x01, wc->ioaddr + WC_CNTL);
outb(0x01, wc->ioaddr + WC_OPER);
}
-static void wcfxs_restart_dma(struct wcfxs *wc)
+static void wcfxs_start_dma(struct wcfxs *wc)
{
- int x;
/* Reset Master and TDM */
+ outb(0x0f, wc->ioaddr + WC_CNTL);
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(1);
outb(0x01, wc->ioaddr + WC_CNTL);
outb(0x01, wc->ioaddr + WC_OPER);
}