From b8157c22274d96911ec48bcf9e870ea2d3622b28 Mon Sep 17 00:00:00 2001
From: kaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 10 Jun 2005 00:58:19 +0000
Subject: fix nas compatibility and overrides for newer wla2-g54l units

git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@1181 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/openwrt/libshared/bcmtimer.h    |  2 ++
 package/openwrt/libshared/linux_timer.c | 35 +++++++++++++++++++++++++++++++--
 2 files changed, 35 insertions(+), 2 deletions(-)

(limited to 'package')

diff --git a/package/openwrt/libshared/bcmtimer.h b/package/openwrt/libshared/bcmtimer.h
index 560957cbf..3db9e624f 100644
--- a/package/openwrt/libshared/bcmtimer.h
+++ b/package/openwrt/libshared/bcmtimer.h
@@ -30,11 +30,13 @@ typedef void (*bcm_timer_cb)(bcm_timer_id id, int data);
 /* OS-independant interfaces, applications should call these functions only */
 int bcm_timer_module_init(int timer_entries, bcm_timer_module_id *module_id);
 int bcm_timer_module_cleanup(bcm_timer_module_id module_id);
+int bcm_timer_module_enable(bcm_timer_module_id module_id, int enable);
 int bcm_timer_create(bcm_timer_module_id module_id, bcm_timer_id *timer_id);
 int bcm_timer_delete(bcm_timer_id timer_id);
 int bcm_timer_gettime(bcm_timer_id timer_id, struct itimerspec *value);
 int bcm_timer_settime(bcm_timer_id timer_id, const struct itimerspec *value);
 int bcm_timer_connect(bcm_timer_id timer_id, bcm_timer_cb func, int data);
 int bcm_timer_cancel(bcm_timer_id timer_id);
+int bcm_timer_change_expirytime(bcm_timer_id timer_id, const struct itimerspec *timer_spec);
 
 #endif	/* #ifndef __bcmtimer_h__ */
diff --git a/package/openwrt/libshared/linux_timer.c b/package/openwrt/libshared/linux_timer.c
index eece9f84e..0402e4437 100644
--- a/package/openwrt/libshared/linux_timer.c
+++ b/package/openwrt/libshared/linux_timer.c
@@ -112,7 +112,7 @@ static void check_timer();
 #if THIS_FINDS_USE
 static int count_queue(struct event *);
 #endif
-
+static int timer_change_settime(timer_t timer_id, const struct itimerspec *timer_spec);
 void block_timer();
 void unblock_timer();
 
@@ -247,6 +247,23 @@ int timer_connect
     return 0;
 }    
 
+/* 
+ * Please Call this function only from the call back functions of the alarm_handler.
+ * This is just a hack 
+*/
+int timer_change_settime
+(
+    timer_t                   timerid, /* timer ID */
+    const struct itimerspec * value   /* time to be set */
+)
+{
+    struct event *event = (struct event *) timerid;
+
+    TIMESPEC_TO_TIMEVAL(&event->it_interval, &value->it_interval);
+    TIMESPEC_TO_TIMEVAL(&event->it_value, &value->it_value);
+
+    return 1; 	
+}
 
 int timer_settime
 (
@@ -673,6 +690,16 @@ int bcm_timer_module_cleanup(bcm_timer_module_id module_id)
 	return 0;
 }
 
+/* Enable/Disable timer module */
+int bcm_timer_module_enable(bcm_timer_module_id module_id, int enable)
+{
+	if (enable)
+		unblock_timer();
+	else
+		block_timer();
+	return 0;
+}
+
 int bcm_timer_create(bcm_timer_module_id module_id, bcm_timer_id *timer_id)
 {
 	module_id = 0;
@@ -704,4 +731,8 @@ int bcm_timer_cancel(bcm_timer_id timer_id)
 	timer_cancel((timer_t)timer_id);
 	return 0;
 }
-
+int bcm_timer_change_expirytime(bcm_timer_id timer_id, const struct itimerspec *timer_spec)
+{
+	timer_change_settime((timer_t)timer_id, timer_spec);
+	return 1;
+}
-- 
cgit v1.2.3