source: rtems/c/src/exec/score/include/rtems/score/watchdog.h @ 3a96054

4.104.114.84.95
Last change on this file since 3a96054 was 08311cc3, checked in by Joel Sherrill <joel.sherrill@…>, on 11/17/99 at 17:51:34

Updated copyright notice.

  • Property mode set to 100644
File size: 4.4 KB
Line 
1/*  watchdog.h
2 *
3 *  This include file contains all the constants and structures associated
4 *  with watchdog timers.   This Handler provides mechanisms which can be
5 *   used to initialize and manipulate watchdog timers.
6 *
7 *  COPYRIGHT (c) 1989-1999.
8 *  On-Line Applications Research Corporation (OAR).
9 *
10 *  The license and distribution terms for this file may be
11 *  found in the file LICENSE in this distribution or at
12 *  http://www.OARcorp.com/rtems/license.html.
13 *
14 *  $Id$
15 */
16
17#ifndef __WATCHDOG_h
18#define __WATCHDOG_h
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#include <rtems/score/object.h>
25
26/*
27 *  The following type defines the control block used to manage
28 *  intervals.
29 */
30
31typedef unsigned32 Watchdog_Interval;
32
33/*
34 *  The following types define a pointer to a watchdog service routine.
35 */
36
37typedef void Watchdog_Service_routine;
38
39typedef Watchdog_Service_routine ( *Watchdog_Service_routine_entry )(
40                 Objects_Id,
41                 void *
42             );
43
44/*
45 *  Constant for indefinite wait.  (actually an illegal interval)
46 */
47
48#define WATCHDOG_NO_TIMEOUT  0
49
50/*
51 *  The following enumerated type lists the states in which a
52 *  watchdog timer may be at any given time.
53 */
54
55typedef enum {
56  WATCHDOG_INACTIVE,       /* off all chains */
57  WATCHDOG_BEING_INSERTED, /* off all chains, searching for insertion point */
58  WATCHDOG_ACTIVE,         /* on chain, allowed to fire */
59  WATCHDOG_REMOVE_IT       /* on chain, remove without firing if expires */
60} Watchdog_States;
61
62/*
63 *  The following enumerated type details the manner in which
64 *  a watchdog chain may be adjusted by the Watchdog_Adjust
65 *  routine.  The direction indicates a movement FORWARD
66 *  or BACKWARD in time.
67 */
68
69typedef enum {
70  WATCHDOG_FORWARD,      /* adjust delta value forward */
71  WATCHDOG_BACKWARD      /* adjust delta value backward */
72} Watchdog_Adjust_directions;
73
74/*
75 *  The following record defines the control block used
76 *  to manage each watchdog timer.
77 */
78
79typedef struct {
80  Chain_Node                      Node;
81  Watchdog_States                 state;
82  Watchdog_Interval               initial;
83  Watchdog_Interval               delta_interval;
84  Watchdog_Interval               start_time;
85  Watchdog_Interval               stop_time;
86  Watchdog_Service_routine_entry  routine;
87  Objects_Id                      id;
88  void                           *user_data;
89}   Watchdog_Control;
90
91/*
92 *  The following are used for synchronization purposes
93 *  during an insert on a watchdog delta chain.
94 */
95
96SCORE_EXTERN volatile unsigned32  _Watchdog_Sync_level;
97SCORE_EXTERN volatile unsigned32  _Watchdog_Sync_count;
98
99/*
100 *  The following contains the number of ticks since the
101 *  system was booted.
102 */
103
104SCORE_EXTERN Watchdog_Interval _Watchdog_Ticks_since_boot;
105
106/*
107 *  The following defines the watchdog chains which are managed
108 *  on ticks and second boundaries.
109 */
110
111SCORE_EXTERN Chain_Control _Watchdog_Ticks_chain;
112SCORE_EXTERN Chain_Control _Watchdog_Seconds_chain;
113
114/*
115 *  _Watchdog_Handler_initialization
116 *
117 *  DESCRIPTION:
118 *
119 *  This routine initializes the watchdog handler.  The watchdog
120 *  synchronization flag is initialized and the watchdog chains are
121 *  initialized and emptied.
122 */
123
124void _Watchdog_Handler_initialization( void );
125
126/*
127 *  _Watchdog_Remove
128 *
129 *  DESCRIPTION:
130 *
131 *  This routine removes THE_WATCHDOG from the watchdog chain on which
132 *  it resides and returns the state THE_WATCHDOG timer was in.
133 */
134
135Watchdog_States _Watchdog_Remove (
136  Watchdog_Control *the_watchdog
137);
138
139/*
140 *  _Watchdog_Adjust
141 *
142 *  DESCRIPTION:
143 *
144 *  This routine adjusts the HEADER watchdog chain in the forward
145 *  or backward DIRECTION for UNITS ticks.
146 */
147
148void _Watchdog_Adjust (
149  Chain_Control              *header,
150  Watchdog_Adjust_directions  direction,
151  Watchdog_Interval           units
152);
153
154/*
155 *  _Watchdog_Insert
156 *
157 *  DESCRIPTION:
158 *
159 *  This routine inserts THE_WATCHDOG into the HEADER watchdog chain
160 *  for a time of UNITS.  The INSERT_MODE indicates whether
161 *  THE_WATCHDOG is to be activated automatically or later, explicitly
162 *  by the caller.
163 *
164 */
165
166void _Watchdog_Insert (
167  Chain_Control         *header,
168  Watchdog_Control      *the_watchdog
169);
170
171/*
172 *  _Watchdog_Tickle
173 *
174 *  DESCRIPTION:
175 *
176 *  This routine is invoked at appropriate intervals to update
177 *  the HEADER watchdog chain.
178 */
179
180void _Watchdog_Tickle (
181  Chain_Control *header
182);
183
184#ifndef __RTEMS_APPLICATION__
185#include <rtems/score/watchdog.inl>
186#endif
187
188#ifdef __cplusplus
189}
190#endif
191
192#endif
193/* end of include file */
Note: See TracBrowser for help on using the repository browser.