summaryrefslogtreecommitdiff
path: root/ztdynamic.c
diff options
context:
space:
mode:
authormarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2002-05-29 16:02:30 +0000
committermarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2002-05-29 16:02:30 +0000
commit39aad5014c2aedc947427403c7986eae43f91257 (patch)
tree13b91a23daa079476ddca4cfaadfaa952eb99d5c /ztdynamic.c
parent118c30b4d470c4cd8034440cb3daf49cca915d39 (diff)
Version 0.2.0 from FTP
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@81 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'ztdynamic.c')
-rwxr-xr-xztdynamic.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/ztdynamic.c b/ztdynamic.c
index 21677bc..aa81fea 100755
--- a/ztdynamic.c
+++ b/ztdynamic.c
@@ -30,6 +30,7 @@
#include <linux/spinlock.h>
#include <linux/slab.h>
#include <linux/kmod.h>
+#include <linux/sched.h>
#ifdef CONFIG_DEVFS_FS
#include <linux/devfs_fs_kernel.h>
#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");
}