#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kthread.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/spinlock.h>
#include <linux/spinlock_types.h>
#include <linux/types.h>
#include <linux/ccp.h>
#include "ccp-dev.h"
#include "sp-dev.h"
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_VERSION(…) …;
MODULE_DESCRIPTION(…) …;
static DEFINE_RWLOCK(sp_unit_lock);
static LIST_HEAD(sp_units);
static atomic_t sp_ordinal;
static void sp_add_device(struct sp_device *sp)
{ … }
static void sp_del_device(struct sp_device *sp)
{ … }
static irqreturn_t sp_irq_handler(int irq, void *data)
{ … }
int sp_request_ccp_irq(struct sp_device *sp, irq_handler_t handler,
const char *name, void *data)
{ … }
int sp_request_psp_irq(struct sp_device *sp, irq_handler_t handler,
const char *name, void *data)
{ … }
void sp_free_ccp_irq(struct sp_device *sp, void *data)
{ … }
void sp_free_psp_irq(struct sp_device *sp, void *data)
{ … }
struct sp_device *sp_alloc_struct(struct device *dev)
{ … }
int sp_init(struct sp_device *sp)
{ … }
void sp_destroy(struct sp_device *sp)
{ … }
int sp_suspend(struct sp_device *sp)
{ … }
int sp_resume(struct sp_device *sp)
{ … }
struct sp_device *sp_get_psp_master_device(void)
{ … }
static int __init sp_mod_init(void)
{ … }
static void __exit sp_mod_exit(void)
{ … }
module_init(…) …;
module_exit(sp_mod_exit);