00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _RTAI_WD_H
00023 #define _RTAI_WD_H
00024
00025 #include <rtai_types.h>
00026
00027
00028 #define NSECS_PER_SEC 1000000000
00029
00030
00031 #define WDLOG(fmt, args...) rt_printk("RTAI[watchdog]: " fmt, ##args)
00032
00033
00034 typedef enum watchdog_policy {
00035 WD_NOTHING,
00036 WD_RESYNC,
00037 WD_DEBUG,
00038 WD_STRETCH,
00039 WD_SLIP,
00040 WD_SUSPEND,
00041 WD_KILL
00042 } wd_policy;
00043
00044
00045 typedef struct bad_rt_task {
00046 RT_TASK *task;
00047 int in_use;
00048 int slipping;
00049 int countdown;
00050 int count;
00051 int valid;
00052 int forced;
00053 RTIME orig_period;
00054 wd_policy policy;
00055 struct bad_rt_task *next;
00056 } BAD_RT_TASK;
00057
00058 #define WD_INDX 2
00059
00060 #define WD_SET_GRACE 1
00061 #define WD_SET_GRACEDIV 2
00062 #define WD_SET_SAFETY 3
00063 #define WD_SET_POLICY 4
00064 #define WD_SET_SLIP 5
00065 #define WD_SET_STRETCH 6
00066 #define WD_SET_LIMIT 7
00067
00068 #ifdef __KERNEL__
00069
00070 #ifdef __cplusplus
00071 extern "C" {
00072 #endif
00073
00074 int __rtai_wd_init(void);
00075
00076 void __rtai_wd_exit(void);
00077
00078
00079 RTAI_SYSCALL_MODE int rt_wdset_grace(int new_value);
00080
00081 RTAI_SYSCALL_MODE int rt_wdset_gracediv(int new_value);
00082
00083 RTAI_SYSCALL_MODE wd_policy rt_wdset_policy(wd_policy new_value);
00084
00085 RTAI_SYSCALL_MODE int rt_wdset_slip(int new_value);
00086
00087 RTAI_SYSCALL_MODE int rt_wdset_stretch(int new_value);
00088
00089 RTAI_SYSCALL_MODE int rt_wdset_limit(int new_value);
00090
00091 RTAI_SYSCALL_MODE int rt_wdset_safety(int new_value);
00092
00093 #ifdef __cplusplus
00094 }
00095 #endif
00096
00097 #else
00098
00099 #ifdef __cplusplus
00100 extern "C" {
00101 #endif
00102
00103
00104 RTAI_PROTO(int, rt_wdset_grace, (int new_value))
00105 {
00106 struct { long new_value; } arg = { new_value };
00107 return rtai_lxrt(WD_INDX, SIZARG, WD_SET_GRACE, &arg).i[LOW];
00108 }
00109
00110 RTAI_PROTO(int, rt_wdset_gracediv, (int new_value))
00111 {
00112 struct { long new_value; } arg = { new_value };
00113 return rtai_lxrt(WD_INDX, SIZARG, WD_SET_GRACEDIV, &arg).i[LOW];
00114 }
00115
00116 RTAI_PROTO(wd_policy, rt_wdset_policy, (wd_policy new_value))
00117 {
00118 struct { long new_value; } arg = { new_value };
00119 return (wd_policy)rtai_lxrt(WD_INDX, SIZARG, WD_SET_POLICY, &arg).i[LOW];
00120 }
00121
00122 RTAI_PROTO(int, rt_wdset_slip, (int new_value))
00123 {
00124 struct { long new_value; } arg = { new_value };
00125 return rtai_lxrt(WD_INDX, SIZARG, WD_SET_SLIP, &arg).i[LOW];
00126 }
00127
00128 RTAI_PROTO(int, rt_wdset_stretch, (int new_value))
00129 {
00130 struct { long new_value; } arg = { new_value };
00131 return rtai_lxrt(WD_INDX, SIZARG, WD_SET_STRETCH, &arg).i[LOW];
00132 }
00133
00134 RTAI_PROTO(int, rt_wdset_limit, (int new_value))
00135 {
00136 struct { long new_value; } arg = { new_value };
00137 return rtai_lxrt(WD_INDX, SIZARG, WD_SET_LIMIT, &arg).i[LOW];
00138 }
00139
00140 RTAI_PROTO(int, rt_wdset_safety, (int new_value))
00141 {
00142 struct { long new_value; } arg = { new_value };
00143 return rtai_lxrt(WD_INDX, SIZARG, WD_SET_SAFETY, &arg).i[LOW];
00144 }
00145
00146 #ifdef __cplusplus
00147 }
00148 #endif
00149
00150 #endif
00151
00152 #endif