From 6a7f88f4d2fbb2fc7422fd1e6d42720720506016 Mon Sep 17 00:00:00 2001 From: sruffell Date: Thu, 18 Jun 2009 16:29:08 +0000 Subject: wctdm24xxp, voicebus: Enable the watchdog for the wctdm24xxp driver. Allows the wctdm24xxp driver to use the default dahdi watchdog facility to kickstart the board in case it stops generating interrupts. DAHDI-254. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@4655 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- kernel/voicebus.c | 15 +++++++++++++++ kernel/voicebus.h | 3 +++ kernel/wctdm24xxp/base.c | 7 +++++++ kernel/zconfig.h | 2 +- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/kernel/voicebus.c b/kernel/voicebus.c index aabfd8c..6724d32 100644 --- a/kernel/voicebus.c +++ b/kernel/voicebus.c @@ -39,6 +39,7 @@ #include #include +#include "zconfig.h" #include "voicebus.h" #define assert(__x__) BUG_ON(!(__x__)) @@ -846,6 +847,7 @@ __vb_disable_interrupts(struct voicebus *vb) __vb_setctl(vb, IER_CSR7, 0); } + static void vb_disable_interrupts(struct voicebus *vb) { @@ -947,6 +949,19 @@ voicebus_start(struct voicebus *vb) return 0; } +#ifdef CONFIG_ZAPTEL_WATCHDOG +/** + * voicebus_watchdog - Called from a watchdog function to restart interrupts. + * + */ +int voicebus_watchdog(struct voicebus *vb) +{ + vb_tx_demand_poll(vb); + return 0; +} +EXPORT_SYMBOL(voicebus_watchdog); +#endif + static void vb_clear_start_transmit_bit(struct voicebus *vb) { diff --git a/kernel/voicebus.h b/kernel/voicebus.h index c234690..59ec484 100644 --- a/kernel/voicebus.h +++ b/kernel/voicebus.h @@ -50,5 +50,8 @@ void voicebus_free(struct voicebus *vb, void *vbb); int voicebus_transmit(struct voicebus *vb, void *vbb); int voicebus_set_minlatency(struct voicebus *vb, unsigned int milliseconds); int voicebus_current_latency(struct voicebus *vb) ; +#ifdef CONFIG_ZAPTEL_WATCHDOG +int voicebus_watchdog(struct voicebus *vb); +#endif #endif /* __VOICEBUS_H__ */ diff --git a/kernel/wctdm24xxp/base.c b/kernel/wctdm24xxp/base.c index bf8a409..e9165f7 100644 --- a/kernel/wctdm24xxp/base.c +++ b/kernel/wctdm24xxp/base.c @@ -2704,11 +2704,16 @@ static int wctdm_open(struct zt_chan *chan) return 0; } +#ifdef CONFIG_ZAPTEL_WATCHDOG static int wctdm_watchdog(struct zt_span *span, int event) { + struct wctdm *wc = span->pvt; printk("TDM: Called watchdog\n"); + if (ZT_WATCHDOG_NOINTS == event) + voicebus_watchdog(wc->vb); return 0; } +#endif static int wctdm_close(struct zt_chan *chan) { @@ -2960,7 +2965,9 @@ static int wctdm_initialize(struct wctdm *wc) wc->span.close = wctdm_close; wc->span.flags = ZT_FLAG_RBS; wc->span.ioctl = wctdm_ioctl; +#ifdef CONFIG_ZAPTEL_WATCHDOG wc->span.watchdog = wctdm_watchdog; +#endif wc->span.dacs= wctdm_dacs; #ifdef VPM_SUPPORT wc->span.echocan_with_params = wctdm_echocan_with_params; diff --git a/kernel/zconfig.h b/kernel/zconfig.h index 26d1755..7239c7f 100644 --- a/kernel/zconfig.h +++ b/kernel/zconfig.h @@ -147,7 +147,7 @@ * Uncomment to enable "watchdog" to monitor if interfaces * stop taking interrupts or otherwise misbehave */ -/* #define CONFIG_ZAPTEL_WATCHDOG */ +#define CONFIG_ZAPTEL_WATCHDOG /* * Uncomment for Non-standard FXS groundstart start state (A=Low, B=Low) -- cgit v1.2.3