Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
watchdog.h
Go to the documentation of this file.
1 /*
2  * Generic watchdog defines. Derived from..
3  *
4  * Berkshire PC Watchdog Defines
5  * by Ken Hollis <[email protected]>
6  *
7  */
8 #ifndef _LINUX_WATCHDOG_H
9 #define _LINUX_WATCHDOG_H
10 
11 
12 #include <linux/bitops.h>
13 #include <linux/device.h>
14 #include <linux/cdev.h>
15 #include <uapi/linux/watchdog.h>
16 
17 struct watchdog_ops;
18 struct watchdog_device;
19 
38 struct watchdog_ops {
39  struct module *owner;
40  /* mandatory operations */
41  int (*start)(struct watchdog_device *);
42  int (*stop)(struct watchdog_device *);
43  /* optional operations */
44  int (*ping)(struct watchdog_device *);
45  unsigned int (*status)(struct watchdog_device *);
46  int (*set_timeout)(struct watchdog_device *, unsigned int);
47  unsigned int (*get_timeleft)(struct watchdog_device *);
48  void (*ref)(struct watchdog_device *);
49  void (*unref)(struct watchdog_device *);
50  long (*ioctl)(struct watchdog_device *, unsigned int, unsigned long);
51 };
52 
79  int id;
80  struct cdev cdev;
81  struct device *dev;
82  struct device *parent;
83  const struct watchdog_info *info;
84  const struct watchdog_ops *ops;
85  unsigned int bootstatus;
86  unsigned int timeout;
87  unsigned int min_timeout;
88  unsigned int max_timeout;
89  void *driver_data;
90  struct mutex lock;
91  unsigned long status;
92 /* Bit numbers for status flags */
93 #define WDOG_ACTIVE 0 /* Is the watchdog running/active */
94 #define WDOG_DEV_OPEN 1 /* Opened via /dev/watchdog ? */
95 #define WDOG_ALLOW_RELEASE 2 /* Did we receive the magic char ? */
96 #define WDOG_NO_WAY_OUT 3 /* Is 'nowayout' feature set ? */
97 #define WDOG_UNREGISTERED 4 /* Has the device been unregistered */
98 };
99 
100 #ifdef CONFIG_WATCHDOG_NOWAYOUT
101 #define WATCHDOG_NOWAYOUT 1
102 #define WATCHDOG_NOWAYOUT_INIT_STATUS (1 << WDOG_NO_WAY_OUT)
103 #else
104 #define WATCHDOG_NOWAYOUT 0
105 #define WATCHDOG_NOWAYOUT_INIT_STATUS 0
106 #endif
107 
108 /* Use the following function to check wether or not the watchdog is active */
109 static inline bool watchdog_active(struct watchdog_device *wdd)
110 {
111  return test_bit(WDOG_ACTIVE, &wdd->status);
112 }
113 
114 /* Use the following function to set the nowayout feature */
115 static inline void watchdog_set_nowayout(struct watchdog_device *wdd, bool nowayout)
116 {
117  if (nowayout)
119 }
120 
121 /* Use the following functions to manipulate watchdog driver specific data */
122 static inline void watchdog_set_drvdata(struct watchdog_device *wdd, void *data)
123 {
124  wdd->driver_data = data;
125 }
126 
127 static inline void *watchdog_get_drvdata(struct watchdog_device *wdd)
128 {
129  return wdd->driver_data;
130 }
131 
132 /* drivers/watchdog/core/watchdog_core.c */
133 extern int watchdog_register_device(struct watchdog_device *);
134 extern void watchdog_unregister_device(struct watchdog_device *);
135 
136 #endif /* ifndef _LINUX_WATCHDOG_H */