diff options
Diffstat (limited to 'package')
-rw-r--r-- | package/openwrt/libshared/bcmtimer.h | 2 | ||||
-rw-r--r-- | package/openwrt/libshared/linux_timer.c | 35 |
2 files changed, 35 insertions, 2 deletions
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; +} |