linux/drivers/watchdog/acquirewdt.c

// SPDX-License-Identifier: GPL-2.0+
/*
 *	Acquire Single Board Computer Watchdog Timer driver
 *
 *	Based on wdt.c. Original copyright messages:
 *
 *	(c) Copyright 1996 Alan Cox <[email protected]>,
 *						All Rights Reserved.
 *
 *	Neither Alan Cox nor CymruNet Ltd. admit liability nor provide
 *	warranty for any of this software. This material is provided
 *	"AS-IS" and at no charge.
 *
 *	(c) Copyright 1995    Alan Cox <[email protected]>
 *
 *	14-Dec-2001 Matt Domsch <[email protected]>
 *	    Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT
 *	    Can't add timeout - driver doesn't allow changing value
 */

/*
 *	Theory of Operation:
 *		The Watch-Dog Timer is provided to ensure that standalone
 *		Systems can always recover from catastrophic conditions that
 *		caused the CPU to crash. This condition may have occurred by
 *		external EMI or a software bug. When the CPU stops working
 *		correctly, hardware on the board will either perform a hardware
 *		reset (cold boot) or a non-maskable interrupt (NMI) to bring the
 *		system back to a known state.
 *
 *		The Watch-Dog Timer is controlled by two I/O Ports.
 *		  443 hex	- Read	- Enable or refresh the Watch-Dog Timer
 *		  043 hex	- Read	- Disable the Watch-Dog Timer
 *
 *		To enable the Watch-Dog Timer, a read from I/O port 443h must
 *		be performed. This will enable and activate the countdown timer
 *		which will eventually time out and either reset the CPU or cause
 *		an NMI depending on the setting of a jumper. To ensure that this
 *		reset condition does not occur, the Watch-Dog Timer must be
 *		periodically refreshed by reading the same I/O port 443h.
 *		The Watch-Dog Timer is disabled by reading I/O port 043h.
 *
 *		The Watch-Dog Timer Time-Out Period is set via jumpers.
 *		It can be 1, 2, 10, 20, 110 or 220 seconds.
 */

/*
 *	Includes, defines, variables, module parameters, ...
 */

#define pr_fmt(fmt)

/* Includes */
#include <linux/module.h>		/* For module specific items */
#include <linux/moduleparam.h>		/* For new moduleparam's */
#include <linux/types.h>		/* For standard types (like size_t) */
#include <linux/errno.h>		/* For the -ENODEV/... values */
#include <linux/kernel.h>		/* For printk/panic/... */
#include <linux/miscdevice.h>		/* For struct miscdevice */
#include <linux/watchdog.h>		/* For the watchdog specific items */
#include <linux/fs.h>			/* For file operations */
#include <linux/ioport.h>		/* For io-port access */
#include <linux/platform_device.h>	/* For platform_driver framework */
#include <linux/init.h>			/* For __init/__exit/... */
#include <linux/uaccess.h>		/* For copy_to_user/put_user/... */
#include <linux/io.h>			/* For inb/outb/... */

/* Module information */
#define DRV_NAME
#define WATCHDOG_NAME
/* There is no way to see what the correct time-out period is */
#define WATCHDOG_HEARTBEAT

/* internal variables */
/* the watchdog platform device */
static struct platform_device *acq_platform_device;
static unsigned long acq_is_open;
static char expect_close;

/* module parameters */
/* You must set this - there is no sane way to probe for this board. */
static int wdt_stop =;
module_param(wdt_stop, int, 0);
MODULE_PARM_DESC();

/* You must set this - there is no sane way to probe for this board. */
static int wdt_start =;
module_param(wdt_start, int, 0);
MODULE_PARM_DESC();

static bool nowayout = WATCHDOG_NOWAYOUT;
module_param(nowayout, bool, 0);
MODULE_PARM_DESC();

/*
 *	Watchdog Operations
 */

static void acq_keepalive(void)
{}

static void acq_stop(void)
{}

/*
 *	/dev/watchdog handling
 */

static ssize_t acq_write(struct file *file, const char __user *buf,
						size_t count, loff_t *ppos)
{}

static long acq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{}

static int acq_open(struct inode *inode, struct file *file)
{}

static int acq_close(struct inode *inode, struct file *file)
{}

/*
 *	Kernel Interfaces
 */

static const struct file_operations acq_fops =;

static struct miscdevice acq_miscdev =;

/*
 *	Init & exit routines
 */

static int __init acq_probe(struct platform_device *dev)
{}

static void acq_remove(struct platform_device *dev)
{}

static void acq_shutdown(struct platform_device *dev)
{}

static struct platform_driver acquirewdt_driver =;

static int __init acq_init(void)
{}

static void __exit acq_exit(void)
{}

module_init();
module_exit(acq_exit);

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();