From 39aad5014c2aedc947427403c7986eae43f91257 Mon Sep 17 00:00:00 2001 From: markster Date: Wed, 29 May 2002 16:02:30 +0000 Subject: Version 0.2.0 from FTP git-svn-id: http://svn.digium.com/svn/zaptel/trunk@81 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- ztdynamic.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'ztdynamic.c') diff --git a/ztdynamic.c b/ztdynamic.c index 21677bc..aa81fea 100755 --- a/ztdynamic.c +++ b/ztdynamic.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef CONFIG_DEVFS_FS #include #endif @@ -688,9 +689,48 @@ void zt_dynamic_unregister(struct zt_dynamic_driver *dri) spin_unlock_irqrestore(&dlock, flags); } +struct timer_list alarmcheck; + +static void check_for_red_alarm(unsigned long ignored) +{ + long flags; + int newalarm; + int alarmchanged = 0; + struct zt_dynamic *z; + spin_lock_irqsave(&dlock, flags); + z = dspans; + while(z) { + newalarm = z->span.alarms & ~ZT_ALARM_RED; + /* If nothing received for a minute, consider that RED ALARM */ + if ((jiffies - z->rxjif) > 1000 / HZ) { + newalarm |= ZT_ALARM_RED; + if (z->span.alarms != newalarm) { + z->span.alarms = newalarm; + zt_alarm_notify(&z->span); + alarmchanged++; + } + } + z = z->next; + } + spin_unlock_irqrestore(&dlock, flags); + if (alarmchanged) + checkmaster(); + + /* Do the next one */ + mod_timer(&alarmcheck, jiffies + 1 * HZ); + +} + int ztdynamic_init(void) { zt_set_dynamic_ioctl(ztdynamic_ioctl); + /* Start process to check for RED ALARM */ + init_timer(&alarmcheck); + alarmcheck.expires = 0; + alarmcheck.data = 0; + alarmcheck.function = check_for_red_alarm; + /* Check once per second */ + mod_timer(&alarmcheck, jiffies + 1 * HZ); printk("Zaptel Dynamic Span support LOADED\n"); return 0; } @@ -698,6 +738,7 @@ int ztdynamic_init(void) void ztdynamic_cleanup(void) { zt_set_dynamic_ioctl(NULL); + del_timer(&alarmcheck); printk("Zaptel Dynamic Span support unloaded\n"); } -- cgit v1.2.3