#define pr_fmt(fmt) …
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/timer.h>
#include <linux/miscdevice.h>
#include <linux/watchdog.h>
#include <linux/dmi.h>
#include <linux/io.h>
#include <linux/uaccess.h>
enum { … };
#define TOPAZ_ASR_REG_OFFSET …
#define TOPAZ_ASR_TOGGLE …
#define TOPAZ_ASR_DISABLE …
#define PEARL_BASE …
#define PEARL_WRITE …
#define PEARL_READ …
#define PEARL_ASR_DISABLE_MASK …
#define PEARL_ASR_TOGGLE_MASK …
#define JASPER_ASR_REG_OFFSET …
#define JASPER_ASR_DISABLE_MASK …
#define JASPER_ASR_TOGGLE_MASK …
#define JUNIPER_BASE_ADDRESS …
#define JUNIPER_ASR_DISABLE_MASK …
#define JUNIPER_ASR_TOGGLE_MASK …
#define SPRUCE_BASE_ADDRESS …
#define SPRUCE_ASR_DISABLE_MASK …
#define SPRUCE_ASR_TOGGLE_MASK …
static bool nowayout = … WATCHDOG_NOWAYOUT;
static unsigned long asr_is_open;
static char asr_expect_close;
static unsigned int asr_type, asr_base, asr_length;
static unsigned int asr_read_addr, asr_write_addr;
static unsigned char asr_toggle_mask, asr_disable_mask;
static DEFINE_SPINLOCK(asr_lock);
static void __asr_toggle(void)
{ … }
static void asr_toggle(void)
{ … }
static void asr_enable(void)
{ … }
static void asr_disable(void)
{ … }
static int __init asr_get_base_address(void)
{ … }
static ssize_t asr_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{ … }
static long asr_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{ … }
static int asr_open(struct inode *inode, struct file *file)
{ … }
static int asr_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations asr_fops = …;
static struct miscdevice asr_miscdev = …;
struct ibmasr_id { … };
static struct ibmasr_id ibmasr_id_table[] __initdata = …;
static int __init ibmasr_init(void)
{ … }
static void __exit ibmasr_exit(void)
{ … }
module_init(…) …;
module_exit(ibmasr_exit);
module_param(nowayout, bool, 0);
MODULE_PARM_DESC(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;