This file is indexed.

/usr/include/rtai/rtai_wd.h is in librtai-dev 3.8.1-4build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
 * Development of this (watchdog) module was sponsored by Alcatel, Strasbourg
 * as part of general debugging enhancements to RTAI.
 *
 * Copyright (©) 2001 Ian Soanes <ians@lineo.com>, All rights reserved
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef _RTAI_WD_H
#define _RTAI_WD_H

#include <rtai_types.h>

// Useful bits and pieces
#define NSECS_PER_SEC 1000000000

// For logging stuff
#define WDLOG(fmt, args...) rt_printk("RTAI[watchdog]: " fmt, ##args)

// What should happen to misbehaving tasks
typedef enum watchdog_policy { 
    WD_NOTHING, 				// Not recommended
    WD_RESYNC,				// Good for occasional overruns
    WD_DEBUG,				// Good for debugging oneshot tasks
    WD_STRETCH,				// Good for overrunning tasks
    WD_SLIP, 				// Good for infinite loops
    WD_SUSPEND, 				// Good for most things
    WD_KILL 				// Death sentence
} wd_policy;

// Information about a misbehaving task
typedef struct bad_rt_task {
    RT_TASK		*task;		// Pointer to the bad task
    int			 in_use;	// Allocated (static memory management)
    int		 	 slipping;	// In the process of being slipped
    int		 	 countdown;	// Watchdog ticks to stay suspended
    int		 	 count;		// How many times it's offended
    int			 valid;		// Still an existing RT task
    int			 forced;	// Forcibly suspended
    RTIME		 orig_period;	// Original period before adjustments
    wd_policy		 policy;	// Policy at time of last offence
    struct bad_rt_task	*next;		// Next in list
} BAD_RT_TASK;

#define WD_INDX          2

#define WD_SET_GRACE     1
#define WD_SET_GRACEDIV  2 
#define WD_SET_SAFETY    3 
#define WD_SET_POLICY    4
#define WD_SET_SLIP      5
#define WD_SET_STRETCH   6
#define WD_SET_LIMIT     7 

#ifdef __KERNEL__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

int __rtai_wd_init(void);

void __rtai_wd_exit(void);

// API for setting parameters
RTAI_SYSCALL_MODE int rt_wdset_grace(int new_value);

RTAI_SYSCALL_MODE int rt_wdset_gracediv(int new_value);

RTAI_SYSCALL_MODE wd_policy rt_wdset_policy(wd_policy new_value);

RTAI_SYSCALL_MODE int rt_wdset_slip(int new_value);

RTAI_SYSCALL_MODE int rt_wdset_stretch(int new_value);

RTAI_SYSCALL_MODE int rt_wdset_limit(int new_value);

RTAI_SYSCALL_MODE int rt_wdset_safety(int new_value);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#else /* !__KERNEL__ */

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

// API for setting parameters
RTAI_PROTO(int, rt_wdset_grace, (int new_value))
{
	struct { long new_value; } arg = { new_value };
	return rtai_lxrt(WD_INDX, SIZARG, WD_SET_GRACE, &arg).i[LOW];
}

RTAI_PROTO(int, rt_wdset_gracediv, (int new_value))
{
	struct { long new_value; } arg = { new_value };
	return rtai_lxrt(WD_INDX, SIZARG, WD_SET_GRACEDIV, &arg).i[LOW];
}

RTAI_PROTO(wd_policy, rt_wdset_policy, (wd_policy new_value))
{
	struct { long new_value; } arg = { new_value };
	return (wd_policy)rtai_lxrt(WD_INDX, SIZARG, WD_SET_POLICY, &arg).i[LOW];
}

RTAI_PROTO(int, rt_wdset_slip, (int new_value))
{
	struct { long new_value; } arg = { new_value };
	return rtai_lxrt(WD_INDX, SIZARG, WD_SET_SLIP, &arg).i[LOW];
}

RTAI_PROTO(int, rt_wdset_stretch, (int new_value))
{
	struct { long new_value; } arg = { new_value };
	return rtai_lxrt(WD_INDX, SIZARG, WD_SET_STRETCH, &arg).i[LOW];
}

RTAI_PROTO(int, rt_wdset_limit, (int new_value))
{
	struct { long new_value; } arg = { new_value };
	return rtai_lxrt(WD_INDX, SIZARG, WD_SET_LIMIT, &arg).i[LOW];
}

RTAI_PROTO(int, rt_wdset_safety, (int new_value))
{
	struct { long new_value; } arg = { new_value };
	return rtai_lxrt(WD_INDX, SIZARG, WD_SET_SAFETY, &arg).i[LOW];
}

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __KERNEL__ */

#endif /* !_RTAI_WD_H */