#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched/signal.h>
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/pci_hotplug.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/atomic.h>
#include <linux/delay.h>
#include <linux/kthread.h>
#include "cpci_hotplug.h"
#define DRIVER_AUTHOR …
#define DRIVER_DESC …
#define MY_NAME …
#define dbg(format, arg...) …
#define err(format, arg...) …
#define info(format, arg...) …
#define warn(format, arg...) …
static DECLARE_RWSEM(list_rwsem);
static LIST_HEAD(slot_list);
static int slots;
static atomic_t extracting;
int cpci_debug;
static struct cpci_hp_controller *controller;
static struct task_struct *cpci_thread;
static int thread_finished;
static int enable_slot(struct hotplug_slot *slot);
static int disable_slot(struct hotplug_slot *slot);
static int set_attention_status(struct hotplug_slot *slot, u8 value);
static int get_power_status(struct hotplug_slot *slot, u8 *value);
static int get_attention_status(struct hotplug_slot *slot, u8 *value);
static int get_adapter_status(struct hotplug_slot *slot, u8 *value);
static int get_latch_status(struct hotplug_slot *slot, u8 *value);
static const struct hotplug_slot_ops cpci_hotplug_slot_ops = …;
static int
enable_slot(struct hotplug_slot *hotplug_slot)
{ … }
static int
disable_slot(struct hotplug_slot *hotplug_slot)
{ … }
static u8
cpci_get_power_status(struct slot *slot)
{ … }
static int
get_power_status(struct hotplug_slot *hotplug_slot, u8 *value)
{ … }
static int
get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value)
{ … }
static int
set_attention_status(struct hotplug_slot *hotplug_slot, u8 status)
{ … }
static int
get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value)
{ … }
static int
get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value)
{ … }
static void release_slot(struct slot *slot)
{ … }
#define SLOT_NAME_SIZE …
int
cpci_hp_register_bus(struct pci_bus *bus, u8 first, u8 last)
{ … }
EXPORT_SYMBOL_GPL(…);
int
cpci_hp_unregister_bus(struct pci_bus *bus)
{ … }
EXPORT_SYMBOL_GPL(…);
static irqreturn_t
cpci_hp_intr(int irq, void *data)
{ … }
static int
init_slots(int clear_ins)
{ … }
static int
check_slots(void)
{ … }
static int
event_thread(void *data)
{ … }
static int
poll_thread(void *data)
{ … }
static int
cpci_start_thread(void)
{ … }
static void
cpci_stop_thread(void)
{ … }
int
cpci_hp_register_controller(struct cpci_hp_controller *new_controller)
{ … }
EXPORT_SYMBOL_GPL(…);
static void
cleanup_slots(void)
{ … }
int
cpci_hp_unregister_controller(struct cpci_hp_controller *old_controller)
{ … }
EXPORT_SYMBOL_GPL(…);
int
cpci_hp_start(void)
{ … }
EXPORT_SYMBOL_GPL(…);
int
cpci_hp_stop(void)
{ … }
EXPORT_SYMBOL_GPL(…);
int __init
cpci_hotplug_init(int debug)
{ … }