diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-02 21:45:15 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-02 21:45:15 +0000 |
commit | 82cb78d84c7962d2b55e1f83c9f8cbcbef386d87 (patch) | |
tree | bae0b9595689a38992ffcc4bad8ddfea285fc16b /c/src/exec/score/src/watchdogadjust.c | |
parent | Split Heap and Time of Day Handlers. (diff) | |
download | rtems-82cb78d84c7962d2b55e1f83c9f8cbcbef386d87.tar.bz2 |
Split core message queue and watchdog handler objects into separate files.
Diffstat (limited to 'c/src/exec/score/src/watchdogadjust.c')
-rw-r--r-- | c/src/exec/score/src/watchdogadjust.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/c/src/exec/score/src/watchdogadjust.c b/c/src/exec/score/src/watchdogadjust.c new file mode 100644 index 0000000000..83322c11e3 --- /dev/null +++ b/c/src/exec/score/src/watchdogadjust.c @@ -0,0 +1,63 @@ +/* + * Watchdog Handler + * + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <rtems/system.h> +#include <rtems/score/isr.h> +#include <rtems/score/watchdog.h> + +/*PAGE + * + * _Watchdog_Adjust + * + * This routine adjusts the delta chain backward or forward in response + * to a time change. + * + * Input parameters: + * header - pointer to the delta chain to be adjusted + * direction - forward or backward adjustment to delta chain + * units - units to adjust + * + * Output parameters: + */ + +void _Watchdog_Adjust( + Chain_Control *header, + Watchdog_Adjust_directions direction, + Watchdog_Interval units +) +{ + if ( !_Chain_Is_empty( header ) ) { + switch ( direction ) { + case WATCHDOG_BACKWARD: + _Watchdog_First( header )->delta_interval += units; + break; + case WATCHDOG_FORWARD: + while ( units ) { + if ( units < _Watchdog_First( header )->delta_interval ) { + _Watchdog_First( header )->delta_interval -= units; + break; + } else { + units -= _Watchdog_First( header )->delta_interval; + _Watchdog_First( header )->delta_interval = 1; + _Watchdog_Tickle( header ); + if ( _Chain_Is_empty( header ) ) + break; + } + } + break; + } + } +} + |