1 #ifndef __WATCHDOG_PRETIMEOUT_H
2 #define __WATCHDOG_PRETIMEOUT_H
3 
4 #define WATCHDOG_GOV_NAME_MAXLEN	20
5 
6 struct watchdog_device;
7 
8 struct watchdog_governor {
9 	const char	name[WATCHDOG_GOV_NAME_MAXLEN];
10 	void		(*pretimeout)(struct watchdog_device *wdd);
11 };
12 
13 #if IS_ENABLED(CONFIG_WATCHDOG_PRETIMEOUT_GOV)
14 /* Interfaces to watchdog pretimeout governors */
15 int watchdog_register_governor(struct watchdog_governor *gov);
16 void watchdog_unregister_governor(struct watchdog_governor *gov);
17 
18 /* Interfaces to watchdog_dev.c */
19 int watchdog_register_pretimeout(struct watchdog_device *wdd);
20 void watchdog_unregister_pretimeout(struct watchdog_device *wdd);
21 int watchdog_pretimeout_available_governors_get(char *buf);
22 int watchdog_pretimeout_governor_get(struct watchdog_device *wdd, char *buf);
23 int watchdog_pretimeout_governor_set(struct watchdog_device *wdd,
24 				     const char *buf);
25 
26 #if IS_ENABLED(CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP)
27 #define WATCHDOG_PRETIMEOUT_DEFAULT_GOV		"noop"
28 #elif IS_ENABLED(CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC)
29 #define WATCHDOG_PRETIMEOUT_DEFAULT_GOV		"panic"
30 #endif
31 
32 #else
33 static inline int watchdog_register_pretimeout(struct watchdog_device *wdd)
34 {
35 	return 0;
36 }
37 
38 static inline void watchdog_unregister_pretimeout(struct watchdog_device *wdd)
39 {
40 }
41 
42 static inline int watchdog_pretimeout_available_governors_get(char *buf)
43 {
44 	return -EINVAL;
45 }
46 
47 static inline int watchdog_pretimeout_governor_get(struct watchdog_device *wdd,
48 						   char *buf)
49 {
50 	return -EINVAL;
51 }
52 
53 static inline int watchdog_pretimeout_governor_set(struct watchdog_device *wdd,
54 						   const char *buf)
55 {
56 	return -EINVAL;
57 }
58 #endif
59 
60 #endif
61