#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <asm/io.h>

size_t tcount = 0;
irq_handler_t irq_handler (int irq, void *dev_id, struct pt_regs *regs)
{
	tcount++;
	return (irq_handler_t) IRQ_HANDLED;
}

ssize_t read_proc(struct file* filp, char *buf, size_t count, loff_t *offp){
	char message[128];
	sprintf(message, "Total Calls: %ld\n", tcount);
	strcpy(buf, message);
	return count;
}

struct file_operations pfo = {
	read : read_proc,
	write: 0
};

int startthings (void){
	int err =  request_irq (, (irq_handler_t) irq_handler, IRQF_SHARED, "netmon", (void *)(irq_handler));
	if(err){
		printk(KERN_INFO "Received error %d\n", err);
	}
	proc_create("netmon", 0, NULL, &pfo);
	return err;
}

void cleanup(void){
	remove_proc_entry("netmon", NULL);
}

MODULE_LICENSE ("GPL");
module_init(startthings);
module_exit(cleanup);