Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 512 → Rev 513

/shark/trunk/drivers/linuxc26/int.c
4,31 → 4,24
#include <asm-generic/errno-base.h>
#include <linux/kernel.h>
 
#define NIL -1
extern void *int_arg_table[16];
extern void *int_func_table[16];
int intr_count = 0;
 
static struct {
void (*func)(int, void *dev_id, struct pt_regs *);
void *data;
int flags;
} handlers[16];
 
unsigned long intr_count = 0;
 
/*
* Generic Linux interrupt handler.
*/
static void linux_intr(int irq)
void linux_intr(int irq)
{
struct pt_regs regs;
 
//printk("linux_intr %d\n", irq);
 
intr_count++;
 
(*handlers[irq].func)(irq, handlers[irq].data, &regs);
 
intr_count--;
 
struct pt_regs regs;
intr_count++;
if (int_func_table[irq] != NULL)
(* (void (*)(int, void *dev_id, struct pt_regs *))int_func_table[irq])(irq, int_arg_table[irq], &regs);
intr_count--;
}
 
/*
36,17 → 29,7
*/
int request_irq(unsigned int irq, void (*handler)(int, void *dev_id, struct pt_regs *), unsigned long flags, const char *device, void *dev_id)
{
if (handlers[irq].func) {
return (-EBUSY);
}
handlers[irq].func = handler;
handlers[irq].flags = flags;
handlers[irq].data = dev_id;
 
shark_handler_set(irq, linux_intr, NIL, TRUE);
 
shark_handler_set(irq, (void *)(handler), dev_id);
return 0;
}
 
55,6 → 38,7
*/
void free_irq(unsigned int irq, void *a)
{
 
shark_handler_remove(irq);
handlers[irq].func = 0;
 
}