/* SPDX-License-Identifier: GPL-2.0+ */
/*
* watchdog_core . h
*
* ( c ) Copyright 2008 - 2011 Alan Cox < alan @ lxorguk . ukuu . org . uk > ,
* All Rights Reserved .
*
* ( c ) Copyright 2008 - 2011 Wim Van Sebroeck < wim @ iguana . be > .
*
* ( c ) Copyright 2021 Hewlett Packard Enterprise Development LP .
*
* This source code is part of the generic code that can be used
* by all the watchdog timer drivers .
*
* Based on source code of the following authors :
* Matt Domsch < Matt_Domsch @ dell . com > ,
* Rob Radez < rob @ osinvestor . com > ,
* Rusty Lynch < rusty @ linux . co . intel . com >
* Satyam Sharma < satyam @ infradead . org >
* Randy Dunlap < randy . dunlap @ oracle . com >
*
* Neither Alan Cox , CymruNet Ltd . , Wim Van Sebroeck nor Iguana vzw .
* admit liability nor provide warranty for any of this software .
* This material is provided " AS - IS " and at no charge .
*/
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/hrtimer_types.h>
#include <linux/init.h>
#include <linux/kthread.h>
#include <linux/mutex_types.h>
#include <linux/types.h>
#include <linux/watchdog.h>
#define MAX_DOGS 32 /* Maximum number of watchdog devices */
/*
* struct watchdog_core_data - watchdog core internal data
* @ dev : The watchdog ' s internal device
* @ cdev : The watchdog ' s Character device .
* @ wdd : Pointer to watchdog device .
* @ lock : Lock for watchdog core .
* @ status : Watchdog core internal status bits .
*/
struct watchdog_core_data {
struct device dev;
struct cdev cdev;
struct watchdog_device *wdd;
struct mutex lock;
ktime_t last_keepalive;
ktime_t last_hw_keepalive;
ktime_t open_deadline;
struct hrtimer timer;
struct kthread_work work;
#if IS_ENABLED(CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT)
struct hrtimer pretimeout_timer;
#endif
unsigned long status; /* Internal status bits */
#define _WDOG_DEV_OPEN 0 /* Opened ? */
#define _WDOG_ALLOW_RELEASE 1 /* Did we receive the magic char ? */
#define _WDOG_KEEPALIVE 2 /* Did we receive a keepalive ? */
};
/*
* Functions / procedures to be called by the core
*/
extern int watchdog_dev_register(struct watchdog_device *);
extern void watchdog_dev_unregister(struct watchdog_device *);
extern int __init watchdog_dev_init(void );
extern void __exit watchdog_dev_exit(void );
static inline bool watchdog_have_pretimeout(struct watchdog_device *wdd)
{
return wdd->info->options & WDIOF_PRETIMEOUT ||
IS_ENABLED(CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT);
}
#if IS_ENABLED(CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT)
void watchdog_hrtimer_pretimeout_init(struct watchdog_device *wdd);
void watchdog_hrtimer_pretimeout_start(struct watchdog_device *wdd);
void watchdog_hrtimer_pretimeout_stop(struct watchdog_device *wdd);
#else
static inline void watchdog_hrtimer_pretimeout_init(struct watchdog_device *wdd) {}
static inline void watchdog_hrtimer_pretimeout_start(struct watchdog_device *wdd) {}
static inline void watchdog_hrtimer_pretimeout_stop(struct watchdog_device *wdd) {}
#endif
Messung V0.5 in Prozent C=92 H=98 G=94
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland