// SPDX-License-Identifier: GPL-2.0-or-later /* * IBM ASM Service Processor Device Driver * * Copyright (C) IBM Corporation, 2004 * * Author: Max Asböck <[email protected]> * * This driver is based on code originally written by Pete Reynolds * and others. */ /* * The ASM device driver does the following things: * * 1) When loaded it sends a message to the service processor, * indicating that an OS is * running. This causes the service processor * to send periodic heartbeats to the OS. * * 2) Answers the periodic heartbeats sent by the service processor. * Failure to do so would result in system reboot. * * 3) Acts as a pass through for dot commands sent from user applications. * The interface for this is the ibmasmfs file system. * * 4) Allows user applications to register for event notification. Events * are sent to the driver through interrupts. They can be read from user * space through the ibmasmfs file system. * * 5) Allows user space applications to send heartbeats to the service * processor (aka reverse heartbeats). Again this happens through ibmasmfs. * * 6) Handles remote mouse and keyboard event interrupts and makes them * available to user applications through ibmasmfs. * */ #include <linux/pci.h> #include <linux/init.h> #include <linux/slab.h> #include "ibmasm.h" #include "lowlevel.h" #include "remote.h" int ibmasm_debug = …; module_param(ibmasm_debug, int , S_IRUGO | S_IWUSR); MODULE_PARM_DESC(…) …; static int ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id) { … } static void ibmasm_remove_one(struct pci_dev *pdev) { … } static struct pci_device_id ibmasm_pci_table[] = …; static struct pci_driver ibmasm_driver = …; static void __exit ibmasm_exit (void) { … } static int __init ibmasm_init(void) { … } module_init(…) …; module_exit(ibmasm_exit); MODULE_AUTHOR(…); MODULE_DESCRIPTION(…); MODULE_LICENSE(…) …; MODULE_DEVICE_TABLE(pci, ibmasm_pci_table);