Commit 2850bc27 authored by Al Viro's avatar Al Viro Committed by Linus Torvalds

[PATCH] m68k pt_regs fixes

m68k_handle_int() split in two functions: __m68k_handle_int() takes
pt_regs * and does set_irq_regs(); m68k_handle_int() doesn't get pt_regs
*.

Places where we used to call m68k_handle_int() recursively with the same
pt_regs have simply lost the second argument, the rest is switched to
__m68k_handle_int().

The rest of patch is just dropping pt_regs * where needed.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 00079e04
...@@ -47,10 +47,10 @@ ...@@ -47,10 +47,10 @@
static void amiga_enable_irq(unsigned int irq); static void amiga_enable_irq(unsigned int irq);
static void amiga_disable_irq(unsigned int irq); static void amiga_disable_irq(unsigned int irq);
static irqreturn_t ami_int1(int irq, void *dev_id, struct pt_regs *fp); static irqreturn_t ami_int1(int irq, void *dev_id);
static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp); static irqreturn_t ami_int3(int irq, void *dev_id);
static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp); static irqreturn_t ami_int4(int irq, void *dev_id);
static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp); static irqreturn_t ami_int5(int irq, void *dev_id);
static struct irq_controller amiga_irq_controller = { static struct irq_controller amiga_irq_controller = {
.name = "amiga", .name = "amiga",
...@@ -113,98 +113,98 @@ static void amiga_disable_irq(unsigned int irq) ...@@ -113,98 +113,98 @@ static void amiga_disable_irq(unsigned int irq)
* The builtin Amiga hardware interrupt handlers. * The builtin Amiga hardware interrupt handlers.
*/ */
static irqreturn_t ami_int1(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t ami_int1(int irq, void *dev_id)
{ {
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
/* if serial transmit buffer empty, interrupt */ /* if serial transmit buffer empty, interrupt */
if (ints & IF_TBE) { if (ints & IF_TBE) {
amiga_custom.intreq = IF_TBE; amiga_custom.intreq = IF_TBE;
m68k_handle_int(IRQ_AMIGA_TBE, fp); m68k_handle_int(IRQ_AMIGA_TBE);
} }
/* if floppy disk transfer complete, interrupt */ /* if floppy disk transfer complete, interrupt */
if (ints & IF_DSKBLK) { if (ints & IF_DSKBLK) {
amiga_custom.intreq = IF_DSKBLK; amiga_custom.intreq = IF_DSKBLK;
m68k_handle_int(IRQ_AMIGA_DSKBLK, fp); m68k_handle_int(IRQ_AMIGA_DSKBLK);
} }
/* if software interrupt set, interrupt */ /* if software interrupt set, interrupt */
if (ints & IF_SOFT) { if (ints & IF_SOFT) {
amiga_custom.intreq = IF_SOFT; amiga_custom.intreq = IF_SOFT;
m68k_handle_int(IRQ_AMIGA_SOFT, fp); m68k_handle_int(IRQ_AMIGA_SOFT);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t ami_int3(int irq, void *dev_id)
{ {
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
/* if a blitter interrupt */ /* if a blitter interrupt */
if (ints & IF_BLIT) { if (ints & IF_BLIT) {
amiga_custom.intreq = IF_BLIT; amiga_custom.intreq = IF_BLIT;
m68k_handle_int(IRQ_AMIGA_BLIT, fp); m68k_handle_int(IRQ_AMIGA_BLIT);
} }
/* if a copper interrupt */ /* if a copper interrupt */
if (ints & IF_COPER) { if (ints & IF_COPER) {
amiga_custom.intreq = IF_COPER; amiga_custom.intreq = IF_COPER;
m68k_handle_int(IRQ_AMIGA_COPPER, fp); m68k_handle_int(IRQ_AMIGA_COPPER);
} }
/* if a vertical blank interrupt */ /* if a vertical blank interrupt */
if (ints & IF_VERTB) { if (ints & IF_VERTB) {
amiga_custom.intreq = IF_VERTB; amiga_custom.intreq = IF_VERTB;
m68k_handle_int(IRQ_AMIGA_VERTB, fp); m68k_handle_int(IRQ_AMIGA_VERTB);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t ami_int4(int irq, void *dev_id)
{ {
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
/* if audio 0 interrupt */ /* if audio 0 interrupt */
if (ints & IF_AUD0) { if (ints & IF_AUD0) {
amiga_custom.intreq = IF_AUD0; amiga_custom.intreq = IF_AUD0;
m68k_handle_int(IRQ_AMIGA_AUD0, fp); m68k_handle_int(IRQ_AMIGA_AUD0);
} }
/* if audio 1 interrupt */ /* if audio 1 interrupt */
if (ints & IF_AUD1) { if (ints & IF_AUD1) {
amiga_custom.intreq = IF_AUD1; amiga_custom.intreq = IF_AUD1;
m68k_handle_int(IRQ_AMIGA_AUD1, fp); m68k_handle_int(IRQ_AMIGA_AUD1);
} }
/* if audio 2 interrupt */ /* if audio 2 interrupt */
if (ints & IF_AUD2) { if (ints & IF_AUD2) {
amiga_custom.intreq = IF_AUD2; amiga_custom.intreq = IF_AUD2;
m68k_handle_int(IRQ_AMIGA_AUD2, fp); m68k_handle_int(IRQ_AMIGA_AUD2);
} }
/* if audio 3 interrupt */ /* if audio 3 interrupt */
if (ints & IF_AUD3) { if (ints & IF_AUD3) {
amiga_custom.intreq = IF_AUD3; amiga_custom.intreq = IF_AUD3;
m68k_handle_int(IRQ_AMIGA_AUD3, fp); m68k_handle_int(IRQ_AMIGA_AUD3);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t ami_int5(int irq, void *dev_id)
{ {
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
/* if serial receive buffer full interrupt */ /* if serial receive buffer full interrupt */
if (ints & IF_RBF) { if (ints & IF_RBF) {
/* acknowledge of IF_RBF must be done by the serial interrupt */ /* acknowledge of IF_RBF must be done by the serial interrupt */
m68k_handle_int(IRQ_AMIGA_RBF, fp); m68k_handle_int(IRQ_AMIGA_RBF);
} }
/* if a disk sync interrupt */ /* if a disk sync interrupt */
if (ints & IF_DSKSYN) { if (ints & IF_DSKSYN) {
amiga_custom.intreq = IF_DSKSYN; amiga_custom.intreq = IF_DSKSYN;
m68k_handle_int(IRQ_AMIGA_DSKSYN, fp); m68k_handle_int(IRQ_AMIGA_DSKSYN);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -82,7 +82,7 @@ unsigned char cia_able_irq(struct ciabase *base, unsigned char mask) ...@@ -82,7 +82,7 @@ unsigned char cia_able_irq(struct ciabase *base, unsigned char mask)
return old; return old;
} }
static irqreturn_t cia_handler(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t cia_handler(int irq, void *dev_id)
{ {
struct ciabase *base = (struct ciabase *)dev_id; struct ciabase *base = (struct ciabase *)dev_id;
int mach_irq; int mach_irq;
...@@ -93,7 +93,7 @@ static irqreturn_t cia_handler(int irq, void *dev_id, struct pt_regs *fp) ...@@ -93,7 +93,7 @@ static irqreturn_t cia_handler(int irq, void *dev_id, struct pt_regs *fp)
amiga_custom.intreq = base->int_mask; amiga_custom.intreq = base->int_mask;
for (; ints; mach_irq++, ints >>= 1) { for (; ints; mach_irq++, ints >>= 1) {
if (ints & 1) if (ints & 1)
m68k_handle_int(mach_irq, fp); m68k_handle_int(mach_irq);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -83,7 +83,7 @@ static char amiga_model_name[13] = "Amiga "; ...@@ -83,7 +83,7 @@ static char amiga_model_name[13] = "Amiga ";
extern char m68k_debug_device[]; extern char m68k_debug_device[];
static void amiga_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); static void amiga_sched_init(irqreturn_t (*handler)(int, void *));
/* amiga specific irq functions */ /* amiga specific irq functions */
extern void amiga_init_IRQ (void); extern void amiga_init_IRQ (void);
static void amiga_get_model(char *model); static void amiga_get_model(char *model);
...@@ -487,8 +487,7 @@ void __init config_amiga(void) ...@@ -487,8 +487,7 @@ void __init config_amiga(void)
static unsigned short jiffy_ticks; static unsigned short jiffy_ticks;
static void __init amiga_sched_init(irqreturn_t (*timer_routine)(int, void *, static void __init amiga_sched_init(irqreturn_t (*timer_routine)(int, void *))
struct pt_regs *))
{ {
static struct resource sched_res = { static struct resource sched_res = {
.name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff, .name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff,
......
...@@ -25,7 +25,7 @@ u_long cpuctrl_physaddr; ...@@ -25,7 +25,7 @@ u_long cpuctrl_physaddr;
u_long timer_physaddr; u_long timer_physaddr;
u_long apollo_model; u_long apollo_model;
extern void dn_sched_init(irqreturn_t (*handler)(int,void *,struct pt_regs *)); extern void dn_sched_init(irqreturn_t (*handler)(int,void *));
extern void dn_init_IRQ(void); extern void dn_init_IRQ(void);
extern unsigned long dn_gettimeoffset(void); extern unsigned long dn_gettimeoffset(void);
extern int dn_dummy_hwclk(int, struct rtc_time *); extern int dn_dummy_hwclk(int, struct rtc_time *);
...@@ -38,7 +38,7 @@ extern irqreturn_t dn_process_int(int irq, struct pt_regs *fp); ...@@ -38,7 +38,7 @@ extern irqreturn_t dn_process_int(int irq, struct pt_regs *fp);
#ifdef CONFIG_HEARTBEAT #ifdef CONFIG_HEARTBEAT
static void dn_heartbeat(int on); static void dn_heartbeat(int on);
#endif #endif
static irqreturn_t dn_timer_int(int irq,void *, struct pt_regs *); static irqreturn_t dn_timer_int(int irq,void *);
static void dn_get_model(char *model); static void dn_get_model(char *model);
static const char *apollo_models[] = { static const char *apollo_models[] = {
[APOLLO_DN3000-APOLLO_DN3000] = "DN3000 (Otter)", [APOLLO_DN3000-APOLLO_DN3000] = "DN3000 (Otter)",
...@@ -174,13 +174,13 @@ void config_apollo(void) { ...@@ -174,13 +174,13 @@ void config_apollo(void) {
} }
irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp) irqreturn_t dn_timer_int(int irq, void *dev_id)
{ {
irqreturn_t (*timer_handler)(int, void *, struct pt_regs *) = dev_id; irqreturn_t (*timer_handler)(int, void *) = dev_id;
volatile unsigned char x; volatile unsigned char x;
timer_handler(irq, dev_id, fp); timer_handler(irq, dev_id);
x=*(volatile unsigned char *)(timer+3); x=*(volatile unsigned char *)(timer+3);
x=*(volatile unsigned char *)(timer+5); x=*(volatile unsigned char *)(timer+5);
...@@ -188,8 +188,8 @@ irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp) ...@@ -188,8 +188,8 @@ irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
void dn_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) { void dn_sched_init(irqreturn_t (*timer_routine)(int, void *))
{
/* program timer 1 */ /* program timer 1 */
*(volatile unsigned char *)(timer+3)=0x01; *(volatile unsigned char *)(timer+3)=0x01;
*(volatile unsigned char *)(timer+1)=0x40; *(volatile unsigned char *)(timer+1)=0x40;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
void dn_process_int(unsigned int irq, struct pt_regs *fp) void dn_process_int(unsigned int irq, struct pt_regs *fp)
{ {
m68k_handle_int(irq, fp); __m68k_handle_int(irq, fp);
*(volatile unsigned char *)(pica)=0x20; *(volatile unsigned char *)(pica)=0x20;
*(volatile unsigned char *)(picb)=0x20; *(volatile unsigned char *)(picb)=0x20;
......
...@@ -62,7 +62,7 @@ static void atari_heartbeat( int on ); ...@@ -62,7 +62,7 @@ static void atari_heartbeat( int on );
#endif #endif
/* atari specific timer functions (in time.c) */ /* atari specific timer functions (in time.c) */
extern void atari_sched_init(irqreturn_t (*)(int, void *, struct pt_regs *)); extern void atari_sched_init(irqreturn_t (*)(int, void *));
extern unsigned long atari_gettimeoffset (void); extern unsigned long atari_gettimeoffset (void);
extern int atari_mste_hwclk (int, struct rtc_time *); extern int atari_mste_hwclk (int, struct rtc_time *);
extern int atari_tt_hwclk (int, struct rtc_time *); extern int atari_tt_hwclk (int, struct rtc_time *);
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
static int stdma_locked; /* the semaphore */ static int stdma_locked; /* the semaphore */
/* int func to be called */ /* int func to be called */
static irqreturn_t (*stdma_isr)(int, void *, struct pt_regs *); static irqreturn_t (*stdma_isr)(int, void *);
static void *stdma_isr_data; /* data passed to isr */ static void *stdma_isr_data; /* data passed to isr */
static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */ static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */
...@@ -53,7 +53,7 @@ static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */ ...@@ -53,7 +53,7 @@ static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */
/***************************** Prototypes *****************************/ /***************************** Prototypes *****************************/
static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp); static irqreturn_t stdma_int (int irq, void *dummy);
/************************* End of Prototypes **************************/ /************************* End of Prototypes **************************/
...@@ -75,8 +75,7 @@ static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp); ...@@ -75,8 +75,7 @@ static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp);
* *
*/ */
void stdma_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), void stdma_lock(irqreturn_t (*handler)(int, void *), void *data)
void *data)
{ {
unsigned long flags; unsigned long flags;
...@@ -188,9 +187,9 @@ void __init stdma_init(void) ...@@ -188,9 +187,9 @@ void __init stdma_init(void)
* *
*/ */
static irqreturn_t stdma_int(int irq, void *dummy, struct pt_regs *fp) static irqreturn_t stdma_int(int irq, void *dummy)
{ {
if (stdma_isr) if (stdma_isr)
(*stdma_isr)(irq, stdma_isr_data, fp); (*stdma_isr)(irq, stdma_isr_data);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <asm/atariints.h> #include <asm/atariints.h>
void __init void __init
atari_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) atari_sched_init(irqreturn_t (*timer_routine)(int, void *))
{ {
/* set Timer C data Register */ /* set Timer C data Register */
mfp.tim_dt_c = INT_TICKS; mfp.tim_dt_c = INT_TICKS;
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
static void bvme6000_get_model(char *model); static void bvme6000_get_model(char *model);
static int bvme6000_get_hardware_list(char *buffer); static int bvme6000_get_hardware_list(char *buffer);
extern void bvme6000_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); extern void bvme6000_sched_init(irqreturn_t (*handler)(int, void *));
extern unsigned long bvme6000_gettimeoffset (void); extern unsigned long bvme6000_gettimeoffset (void);
extern int bvme6000_hwclk (int, struct rtc_time *); extern int bvme6000_hwclk (int, struct rtc_time *);
extern int bvme6000_set_clock_mmss (unsigned long); extern int bvme6000_set_clock_mmss (unsigned long);
...@@ -52,7 +52,7 @@ static unsigned char bin2bcd (unsigned char b); ...@@ -52,7 +52,7 @@ static unsigned char bin2bcd (unsigned char b);
/* Save tick handler routine pointer, will point to do_timer() in /* Save tick handler routine pointer, will point to do_timer() in
* kernel/sched.c, called via bvme6000_process_int() */ * kernel/sched.c, called via bvme6000_process_int() */
static irqreturn_t (*tick_handler)(int, void *, struct pt_regs *); static irqreturn_t (*tick_handler)(int, void *);
int bvme6000_parse_bootinfo(const struct bi_record *bi) int bvme6000_parse_bootinfo(const struct bi_record *bi)
...@@ -154,7 +154,7 @@ void __init config_bvme6000(void) ...@@ -154,7 +154,7 @@ void __init config_bvme6000(void)
} }
irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp) irqreturn_t bvme6000_abort_int (int irq, void *dev_id)
{ {
unsigned long *new = (unsigned long *)vectors; unsigned long *new = (unsigned long *)vectors;
unsigned long *old = (unsigned long *)0xf8000000; unsigned long *old = (unsigned long *)0xf8000000;
...@@ -171,14 +171,14 @@ irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp) ...@@ -171,14 +171,14 @@ irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp)
} }
static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t bvme6000_timer_int (int irq, void *dev_id)
{ {
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
unsigned char msr = rtc->msr & 0xc0; unsigned char msr = rtc->msr & 0xc0;
rtc->msr = msr | 0x20; /* Ack the interrupt */ rtc->msr = msr | 0x20; /* Ack the interrupt */
return tick_handler(irq, dev_id, fp); return tick_handler(irq, dev_id);
} }
/* /*
...@@ -190,7 +190,7 @@ static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp ...@@ -190,7 +190,7 @@ static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp
* so divide by 8 to get the microsecond result. * so divide by 8 to get the microsecond result.
*/ */
void bvme6000_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) void bvme6000_sched_init (irqreturn_t (*timer_routine)(int, void *))
{ {
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
unsigned char msr = rtc->msr & 0xc0; unsigned char msr = rtc->msr & 0xc0;
......
...@@ -36,15 +36,15 @@ ...@@ -36,15 +36,15 @@
#define INTVAL ((10000 / 4) - 1) #define INTVAL ((10000 / 4) - 1)
static irqreturn_t hp300_tick(int irq, void *dev_id, struct pt_regs *regs) static irqreturn_t hp300_tick(int irq, void *dev_id)
{ {
unsigned long tmp; unsigned long tmp;
irqreturn_t (*vector)(int, void *, struct pt_regs *) = dev_id; irqreturn_t (*vector)(int, void *) = dev_id;
in_8(CLOCKBASE + CLKSR); in_8(CLOCKBASE + CLKSR);
asm volatile ("movpw %1@(5),%0" : "=d" (tmp) : "a" (CLOCKBASE)); asm volatile ("movpw %1@(5),%0" : "=d" (tmp) : "a" (CLOCKBASE));
/* Turn off the network and SCSI leds */ /* Turn off the network and SCSI leds */
blinken_leds(0, 0xe0); blinken_leds(0, 0xe0);
return vector(irq, NULL, regs); return vector(irq, NULL);
} }
unsigned long hp300_gettimeoffset(void) unsigned long hp300_gettimeoffset(void)
...@@ -63,7 +63,7 @@ unsigned long hp300_gettimeoffset(void) ...@@ -63,7 +63,7 @@ unsigned long hp300_gettimeoffset(void)
return (USECS_PER_JIFFY * ticks) / INTVAL; return (USECS_PER_JIFFY * ticks) / INTVAL;
} }
void __init hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) void __init hp300_sched_init(irqreturn_t (*vector)(int, void *))
{ {
out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */
out_8(CLOCKBASE + CLKCR1, 0x1); /* reset */ out_8(CLOCKBASE + CLKCR1, 0x1); /* reset */
......
extern void hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)); extern void hp300_sched_init(irqreturn_t (*vector)(int, void *));
extern unsigned long hp300_gettimeoffset (void); extern unsigned long hp300_gettimeoffset (void);
...@@ -205,7 +205,7 @@ ENTRY(auto_inthandler) ...@@ -205,7 +205,7 @@ ENTRY(auto_inthandler)
movel %sp,%sp@- movel %sp,%sp@-
movel %d0,%sp@- | put vector # on stack movel %d0,%sp@- | put vector # on stack
auto_irqhandler_fixup = . + 2 auto_irqhandler_fixup = . + 2
jsr m68k_handle_int | process the IRQ jsr __m68k_handle_int | process the IRQ
addql #8,%sp | pop parameters off stack addql #8,%sp | pop parameters off stack
ret_from_interrupt: ret_from_interrupt:
...@@ -239,7 +239,7 @@ user_irqvec_fixup = . + 2 ...@@ -239,7 +239,7 @@ user_irqvec_fixup = . + 2
movel %sp,%sp@- movel %sp,%sp@-
movel %d0,%sp@- | put vector # on stack movel %d0,%sp@- | put vector # on stack
user_irqhandler_fixup = . + 2 user_irqhandler_fixup = . + 2
jsr m68k_handle_int | process the IRQ jsr __m68k_handle_int | process the IRQ
addql #8,%sp | pop parameters off stack addql #8,%sp | pop parameters off stack
subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1)
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/irq_regs.h>
#ifdef CONFIG_Q40 #ifdef CONFIG_Q40
#include <asm/q40ints.h> #include <asm/q40ints.h>
...@@ -104,7 +105,7 @@ void __init init_IRQ(void) ...@@ -104,7 +105,7 @@ void __init init_IRQ(void)
* @handler: called from auto vector interrupts * @handler: called from auto vector interrupts
* *
* setup the handler to be called from auto vector interrupts instead of the * setup the handler to be called from auto vector interrupts instead of the
* standard m68k_handle_int(), it will be called with irq numbers in the range * standard __m68k_handle_int(), it will be called with irq numbers in the range
* from IRQ_AUTO_1 - IRQ_AUTO_7. * from IRQ_AUTO_1 - IRQ_AUTO_7.
*/ */
void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *))
...@@ -123,7 +124,7 @@ void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_re ...@@ -123,7 +124,7 @@ void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_re
* setup user vector interrupts, this includes activating the specified range * setup user vector interrupts, this includes activating the specified range
* of interrupts, only then these interrupts can be requested (note: this is * of interrupts, only then these interrupts can be requested (note: this is
* different from auto vector interrupts). An optional handler can be installed * different from auto vector interrupts). An optional handler can be installed
* to be called instead of the default m68k_handle_int(), it will be called * to be called instead of the default __m68k_handle_int(), it will be called
* with irq numbers starting from IRQ_USER. * with irq numbers starting from IRQ_USER.
*/ */
void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt,
...@@ -215,7 +216,7 @@ int setup_irq(unsigned int irq, struct irq_node *node) ...@@ -215,7 +216,7 @@ int setup_irq(unsigned int irq, struct irq_node *node)
} }
int request_irq(unsigned int irq, int request_irq(unsigned int irq,
irqreturn_t (*handler) (int, void *, struct pt_regs *), irqreturn_t (*handler) (int, void *),
unsigned long flags, const char *devname, void *dev_id) unsigned long flags, const char *devname, void *dev_id)
{ {
struct irq_node *node; struct irq_node *node;
...@@ -379,18 +380,25 @@ unsigned int irq_canonicalize(unsigned int irq) ...@@ -379,18 +380,25 @@ unsigned int irq_canonicalize(unsigned int irq)
EXPORT_SYMBOL(irq_canonicalize); EXPORT_SYMBOL(irq_canonicalize);
asmlinkage void m68k_handle_int(unsigned int irq, struct pt_regs *regs) asmlinkage void m68k_handle_int(unsigned int irq)
{ {
struct irq_node *node; struct irq_node *node;
kstat_cpu(0).irqs[irq]++; kstat_cpu(0).irqs[irq]++;
node = irq_list[irq]; node = irq_list[irq];
do { do {
node->handler(irq, node->dev_id, regs); node->handler(irq, node->dev_id);
node = node->next; node = node->next;
} while (node); } while (node);
} }
asmlinkage void __m68k_handle_int(unsigned int irq, struct pt_regs *regs)
{
struct pt_regs *old_regs;
old_regs = set_irq_regs(regs);
m68k_handle_int(irq);
set_irq_regs(old_regs);
}
asmlinkage void handle_badint(struct pt_regs *regs) asmlinkage void handle_badint(struct pt_regs *regs)
{ {
kstat_cpu(0).irqs[0]++; kstat_cpu(0).irqs[0]++;
......
...@@ -64,7 +64,7 @@ static char m68k_command_line[CL_SIZE]; ...@@ -64,7 +64,7 @@ static char m68k_command_line[CL_SIZE];
char m68k_debug_device[6] = ""; char m68k_debug_device[6] = "";
void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)) __initdata = NULL; void (*mach_sched_init) (irqreturn_t (*handler)(int, void *)) __initdata = NULL;
/* machine dependent irq functions */ /* machine dependent irq functions */
void (*mach_init_IRQ) (void) __initdata = NULL; void (*mach_init_IRQ) (void) __initdata = NULL;
void (*mach_get_model) (char *model); void (*mach_get_model) (char *model);
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq_regs.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/timex.h> #include <linux/timex.h>
...@@ -37,13 +38,13 @@ static inline int set_rtc_mmss(unsigned long nowtime) ...@@ -37,13 +38,13 @@ static inline int set_rtc_mmss(unsigned long nowtime)
* timer_interrupt() needs to keep up the real-time clock, * timer_interrupt() needs to keep up the real-time clock,
* as well as call the "do_timer()" routine every clocktick * as well as call the "do_timer()" routine every clocktick
*/ */
static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs) static irqreturn_t timer_interrupt(int irq, void *dummy)
{ {
do_timer(1); do_timer(1);
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
update_process_times(user_mode(regs)); update_process_times(user_mode(get_irq_regs()));
#endif #endif
profile_tick(CPU_PROFILING, regs); profile_tick(CPU_PROFILING);
#ifdef CONFIG_HEARTBEAT #ifdef CONFIG_HEARTBEAT
/* use power LED as a heartbeat instead -- much more useful /* use power LED as a heartbeat instead -- much more useful
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
int baboon_present,baboon_active; int baboon_present,baboon_active;
volatile struct baboon *baboon; volatile struct baboon *baboon;
irqreturn_t baboon_irq(int, void *, struct pt_regs *); irqreturn_t baboon_irq(int, void *);
#if 0 #if 0
extern int macide_ack_intr(struct ata_channel *); extern int macide_ack_intr(struct ata_channel *);
...@@ -64,7 +64,7 @@ void __init baboon_register_interrupts(void) ...@@ -64,7 +64,7 @@ void __init baboon_register_interrupts(void)
* Baboon interrupt handler. This works a lot like a VIA. * Baboon interrupt handler. This works a lot like a VIA.
*/ */
irqreturn_t baboon_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t baboon_irq(int irq, void *dev_id)
{ {
int irq_bit,i; int irq_bit,i;
unsigned char events; unsigned char events;
...@@ -81,7 +81,7 @@ irqreturn_t baboon_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -81,7 +81,7 @@ irqreturn_t baboon_irq(int irq, void *dev_id, struct pt_regs *regs)
for (i = 0, irq_bit = 1 ; i < 3 ; i++, irq_bit <<= 1) { for (i = 0, irq_bit = 1 ; i < 3 ; i++, irq_bit <<= 1) {
if (events & irq_bit/* & baboon_active*/) { if (events & irq_bit/* & baboon_active*/) {
baboon_active &= ~irq_bit; baboon_active &= ~irq_bit;
m68k_handle_int(IRQ_BABOON_0 + i, regs); m68k_handle_int(IRQ_BABOON_0 + i);
baboon_active |= irq_bit; baboon_active |= irq_bit;
baboon->mb_ifr &= ~irq_bit; baboon->mb_ifr &= ~irq_bit;
} }
......
...@@ -72,7 +72,7 @@ extern int show_mac_interrupts(struct seq_file *, void *); ...@@ -72,7 +72,7 @@ extern int show_mac_interrupts(struct seq_file *, void *);
extern void iop_preinit(void); extern void iop_preinit(void);
extern void iop_init(void); extern void iop_init(void);
extern void via_init(void); extern void via_init(void);
extern void via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *)); extern void via_init_clock(irqreturn_t (*func)(int, void *));
extern void via_flush_cache(void); extern void via_flush_cache(void);
extern void oss_init(void); extern void oss_init(void);
extern void psc_init(void); extern void psc_init(void);
...@@ -88,7 +88,7 @@ extern void mac_debugging_long(int, long); ...@@ -88,7 +88,7 @@ extern void mac_debugging_long(int, long);
static void mac_get_model(char *str); static void mac_get_model(char *str);
static void mac_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) static void mac_sched_init(irqreturn_t (*vector)(int, void *))
{ {
via_init_clock(vector); via_init_clock(vector);
} }
......
...@@ -132,7 +132,7 @@ static int iop_get_proc_info(char *, char **, off_t, int); ...@@ -132,7 +132,7 @@ static int iop_get_proc_info(char *, char **, off_t, int);
struct listener { struct listener {
const char *devname; const char *devname;
void (*handler)(struct iop_msg *, struct pt_regs *); void (*handler)(struct iop_msg *);
}; };
/* /*
...@@ -152,7 +152,7 @@ static struct iop_msg iop_msg_pool[NUM_IOP_MSGS]; ...@@ -152,7 +152,7 @@ static struct iop_msg iop_msg_pool[NUM_IOP_MSGS];
static struct iop_msg *iop_send_queue[NUM_IOPS][NUM_IOP_CHAN]; static struct iop_msg *iop_send_queue[NUM_IOPS][NUM_IOP_CHAN];
static struct listener iop_listeners[NUM_IOPS][NUM_IOP_CHAN]; static struct listener iop_listeners[NUM_IOPS][NUM_IOP_CHAN];
irqreturn_t iop_ism_irq(int, void *, struct pt_regs *); irqreturn_t iop_ism_irq(int, void *);
extern void oss_irq_enable(int); extern void oss_irq_enable(int);
...@@ -342,7 +342,7 @@ void __init iop_register_interrupts(void) ...@@ -342,7 +342,7 @@ void __init iop_register_interrupts(void)
*/ */
int iop_listen(uint iop_num, uint chan, int iop_listen(uint iop_num, uint chan,
void (*handler)(struct iop_msg *, struct pt_regs *), void (*handler)(struct iop_msg *),
const char *devname) const char *devname)
{ {
if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return -EINVAL; if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return -EINVAL;
...@@ -407,7 +407,7 @@ static void iop_do_send(struct iop_msg *msg) ...@@ -407,7 +407,7 @@ static void iop_do_send(struct iop_msg *msg)
* has gone into the IOP_MSG_COMPLETE state. * has gone into the IOP_MSG_COMPLETE state.
*/ */
static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs) static void iop_handle_send(uint iop_num, uint chan)
{ {
volatile struct mac_iop *iop = iop_base[iop_num]; volatile struct mac_iop *iop = iop_base[iop_num];
struct iop_msg *msg,*msg2; struct iop_msg *msg,*msg2;
...@@ -426,7 +426,7 @@ static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs) ...@@ -426,7 +426,7 @@ static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs)
for (i = 0 ; i < IOP_MSG_LEN ; i++, offset++) { for (i = 0 ; i < IOP_MSG_LEN ; i++, offset++) {
msg->reply[i] = iop_readb(iop, offset); msg->reply[i] = iop_readb(iop, offset);
} }
if (msg->handler) (*msg->handler)(msg, regs); if (msg->handler) (*msg->handler)(msg);
msg2 = msg; msg2 = msg;
msg = msg->next; msg = msg->next;
iop_free_msg(msg2); iop_free_msg(msg2);
...@@ -440,7 +440,7 @@ static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs) ...@@ -440,7 +440,7 @@ static void iop_handle_send(uint iop_num, uint chan, struct pt_regs *regs)
* gone into the IOP_MSG_NEW state. * gone into the IOP_MSG_NEW state.
*/ */
static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs) static void iop_handle_recv(uint iop_num, uint chan)
{ {
volatile struct mac_iop *iop = iop_base[iop_num]; volatile struct mac_iop *iop = iop_base[iop_num];
int i,offset; int i,offset;
...@@ -468,7 +468,7 @@ static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs) ...@@ -468,7 +468,7 @@ static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs)
/* the message ourselves to avoid possible stalls. */ /* the message ourselves to avoid possible stalls. */
if (msg->handler) { if (msg->handler) {
(*msg->handler)(msg, regs); (*msg->handler)(msg);
} else { } else {
#ifdef DEBUG_IOP #ifdef DEBUG_IOP
printk("iop_handle_recv: unclaimed message on iop %d channel %d\n", iop_num, chan); printk("iop_handle_recv: unclaimed message on iop %d channel %d\n", iop_num, chan);
...@@ -492,7 +492,7 @@ static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs) ...@@ -492,7 +492,7 @@ static void iop_handle_recv(uint iop_num, uint chan, struct pt_regs *regs)
int iop_send_message(uint iop_num, uint chan, void *privdata, int iop_send_message(uint iop_num, uint chan, void *privdata,
uint msg_len, __u8 *msg_data, uint msg_len, __u8 *msg_data,
void (*handler)(struct iop_msg *, struct pt_regs *)) void (*handler)(struct iop_msg *))
{ {
struct iop_msg *msg, *q; struct iop_msg *msg, *q;
...@@ -584,7 +584,7 @@ __u8 *iop_compare_code(uint iop_num, __u8 *code_start, ...@@ -584,7 +584,7 @@ __u8 *iop_compare_code(uint iop_num, __u8 *code_start,
* Handle an ISM IOP interrupt * Handle an ISM IOP interrupt
*/ */
irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t iop_ism_irq(int irq, void *dev_id)
{ {
uint iop_num = (uint) dev_id; uint iop_num = (uint) dev_id;
volatile struct mac_iop *iop = iop_base[iop_num]; volatile struct mac_iop *iop = iop_base[iop_num];
...@@ -608,7 +608,7 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -608,7 +608,7 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs)
printk(" %02X", state); printk(" %02X", state);
#endif #endif
if (state == IOP_MSG_COMPLETE) { if (state == IOP_MSG_COMPLETE) {
iop_handle_send(iop_num, i, regs); iop_handle_send(iop_num, i);
} }
} }
#ifdef DEBUG_IOP #ifdef DEBUG_IOP
...@@ -628,7 +628,7 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -628,7 +628,7 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id, struct pt_regs *regs)
printk(" %02X", state); printk(" %02X", state);
#endif #endif
if (state == IOP_MSG_NEW) { if (state == IOP_MSG_NEW) {
iop_handle_recv(iop_num, i, regs); iop_handle_recv(iop_num, i);
} }
} }
#ifdef DEBUG_IOP #ifdef DEBUG_IOP
......
...@@ -133,6 +133,7 @@ ...@@ -133,6 +133,7 @@
#include <asm/hwtest.h> #include <asm/hwtest.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/macints.h> #include <asm/macints.h>
#include <asm/irq_regs.h>
#define DEBUG_SPURIOUS #define DEBUG_SPURIOUS
#define SHUTUP_SONIC #define SHUTUP_SONIC
...@@ -208,8 +209,8 @@ static void scc_irq_disable(unsigned int); ...@@ -208,8 +209,8 @@ static void scc_irq_disable(unsigned int);
* console_loglevel determines NMI handler function * console_loglevel determines NMI handler function
*/ */
irqreturn_t mac_nmi_handler(int, void *, struct pt_regs *); irqreturn_t mac_nmi_handler(int, void *);
irqreturn_t mac_debug_handler(int, void *, struct pt_regs *); irqreturn_t mac_debug_handler(int, void *);
/* #define DEBUG_MACINTS */ /* #define DEBUG_MACINTS */
...@@ -393,7 +394,7 @@ int mac_irq_pending(unsigned int irq) ...@@ -393,7 +394,7 @@ int mac_irq_pending(unsigned int irq)
static int num_debug[8]; static int num_debug[8];
irqreturn_t mac_debug_handler(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t mac_debug_handler(int irq, void *dev_id)
{ {
if (num_debug[irq] < 10) { if (num_debug[irq] < 10) {
printk("DEBUG: Unexpected IRQ %d\n", irq); printk("DEBUG: Unexpected IRQ %d\n", irq);
...@@ -405,7 +406,7 @@ irqreturn_t mac_debug_handler(int irq, void *dev_id, struct pt_regs *regs) ...@@ -405,7 +406,7 @@ irqreturn_t mac_debug_handler(int irq, void *dev_id, struct pt_regs *regs)
static int in_nmi; static int in_nmi;
static volatile int nmi_hold; static volatile int nmi_hold;
irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp) irqreturn_t mac_nmi_handler(int irq, void *dev_id)
{ {
int i; int i;
/* /*
...@@ -432,6 +433,7 @@ irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp) ...@@ -432,6 +433,7 @@ irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp)
if (console_loglevel >= 8) { if (console_loglevel >= 8) {
#if 0 #if 0
struct pt_regs *fp = get_irq_regs();
show_state(); show_state();
printk("PC: %08lx\nSR: %04x SP: %p\n", fp->pc, fp->sr, fp); printk("PC: %08lx\nSR: %04x SP: %p\n", fp->pc, fp->sr, fp);
printk("d0: %08lx d1: %08lx d2: %08lx d3: %08lx\n", printk("d0: %08lx d1: %08lx d2: %08lx d3: %08lx\n",
...@@ -479,7 +481,7 @@ static void scc_irq_disable(unsigned int irq) ...@@ -479,7 +481,7 @@ static void scc_irq_disable(unsigned int irq)
* here is cleaner than hacking it into drivers/char/macserial.c. * here is cleaner than hacking it into drivers/char/macserial.c.
*/ */
void mac_scc_dispatch(int irq, void *dev_id, struct pt_regs *regs) void mac_scc_dispatch(int irq, void *dev_id)
{ {
volatile unsigned char *scc = (unsigned char *) mac_bi_data.sccbase + 2; volatile unsigned char *scc = (unsigned char *) mac_bi_data.sccbase + 2;
unsigned char reg; unsigned char reg;
...@@ -504,7 +506,7 @@ void mac_scc_dispatch(int irq, void *dev_id, struct pt_regs *regs) ...@@ -504,7 +506,7 @@ void mac_scc_dispatch(int irq, void *dev_id, struct pt_regs *regs)
/* pretty much kill the system. */ /* pretty much kill the system. */
if (reg & 0x38) if (reg & 0x38)
m68k_handle_int(IRQ_SCCA, regs); m68k_handle_int(IRQ_SCCA);
if (reg & 0x07) if (reg & 0x07)
m68k_handle_int(IRQ_SCCB, regs); m68k_handle_int(IRQ_SCCB);
} }
...@@ -30,11 +30,11 @@ ...@@ -30,11 +30,11 @@
int oss_present; int oss_present;
volatile struct mac_oss *oss; volatile struct mac_oss *oss;
irqreturn_t oss_irq(int, void *, struct pt_regs *); irqreturn_t oss_irq(int, void *);
irqreturn_t oss_nubus_irq(int, void *, struct pt_regs *); irqreturn_t oss_nubus_irq(int, void *);
extern irqreturn_t via1_irq(int, void *, struct pt_regs *); extern irqreturn_t via1_irq(int, void *);
extern irqreturn_t mac_scc_dispatch(int, void *, struct pt_regs *); extern irqreturn_t mac_scc_dispatch(int, void *);
/* /*
* Initialize the OSS * Initialize the OSS
...@@ -92,7 +92,7 @@ void __init oss_nubus_init(void) ...@@ -92,7 +92,7 @@ void __init oss_nubus_init(void)
* and SCSI; everything else is routed to its own autovector IRQ. * and SCSI; everything else is routed to its own autovector IRQ.
*/ */
irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t oss_irq(int irq, void *dev_id)
{ {
int events; int events;
...@@ -113,7 +113,7 @@ irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -113,7 +113,7 @@ irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs)
oss->irq_pending &= ~OSS_IP_SOUND; oss->irq_pending &= ~OSS_IP_SOUND;
} else if (events & OSS_IP_SCSI) { } else if (events & OSS_IP_SCSI) {
oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED; oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED;
m68k_handle_int(IRQ_MAC_SCSI, regs); m68k_handle_int(IRQ_MAC_SCSI);
oss->irq_pending &= ~OSS_IP_SCSI; oss->irq_pending &= ~OSS_IP_SCSI;
oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI; oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI;
} else { } else {
...@@ -128,7 +128,7 @@ irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -128,7 +128,7 @@ irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs)
* Unlike the VIA/RBV this is on its own autovector interrupt level. * Unlike the VIA/RBV this is on its own autovector interrupt level.
*/ */
irqreturn_t oss_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t oss_nubus_irq(int irq, void *dev_id)
{ {
int events, irq_bit, i; int events, irq_bit, i;
...@@ -146,7 +146,7 @@ irqreturn_t oss_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -146,7 +146,7 @@ irqreturn_t oss_nubus_irq(int irq, void *dev_id, struct pt_regs *regs)
for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) { for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) {
if (events & irq_bit) { if (events & irq_bit) {
oss->irq_level[i] = OSS_IRQLEV_DISABLED; oss->irq_level[i] = OSS_IRQLEV_DISABLED;
m68k_handle_int(NUBUS_SOURCE_BASE + i, regs); m68k_handle_int(NUBUS_SOURCE_BASE + i);
oss->irq_pending &= ~irq_bit; oss->irq_pending &= ~irq_bit;
oss->irq_level[i] = OSS_IRQLEV_NUBUS; oss->irq_level[i] = OSS_IRQLEV_NUBUS;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
int psc_present; int psc_present;
volatile __u8 *psc; volatile __u8 *psc;
irqreturn_t psc_irq(int, void *, struct pt_regs *); irqreturn_t psc_irq(int, void *);
/* /*
* Debugging dump, used in various places to see what's going on. * Debugging dump, used in various places to see what's going on.
...@@ -127,7 +127,7 @@ void __init psc_register_interrupts(void) ...@@ -127,7 +127,7 @@ void __init psc_register_interrupts(void)
* PSC interrupt handler. It's a lot like the VIA interrupt handler. * PSC interrupt handler. It's a lot like the VIA interrupt handler.
*/ */
irqreturn_t psc_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t psc_irq(int irq, void *dev_id)
{ {
int pIFR = pIFRbase + ((int) dev_id); int pIFR = pIFRbase + ((int) dev_id);
int pIER = pIERbase + ((int) dev_id); int pIER = pIERbase + ((int) dev_id);
...@@ -149,7 +149,7 @@ irqreturn_t psc_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -149,7 +149,7 @@ irqreturn_t psc_irq(int irq, void *dev_id, struct pt_regs *regs)
for (i = 0, irq_bit = 1 ; i < 4 ; i++, irq_bit <<= 1) { for (i = 0, irq_bit = 1 ; i < 4 ; i++, irq_bit <<= 1) {
if (events & irq_bit) { if (events & irq_bit) {
psc_write_byte(pIER, irq_bit); psc_write_byte(pIER, irq_bit);
m68k_handle_int(base_irq + i, regs); m68k_handle_int(base_irq + i);
psc_write_byte(pIFR, irq_bit); psc_write_byte(pIFR, irq_bit);
psc_write_byte(pIER, irq_bit | 0x80); psc_write_byte(pIER, irq_bit | 0x80);
} }
......
...@@ -63,14 +63,14 @@ static int gIER,gIFR,gBufA,gBufB; ...@@ -63,14 +63,14 @@ static int gIER,gIFR,gBufA,gBufB;
static int nubus_active; static int nubus_active;
void via_debug_dump(void); void via_debug_dump(void);
irqreturn_t via1_irq(int, void *, struct pt_regs *); irqreturn_t via1_irq(int, void *);
irqreturn_t via2_irq(int, void *, struct pt_regs *); irqreturn_t via2_irq(int, void *);
irqreturn_t via_nubus_irq(int, void *, struct pt_regs *); irqreturn_t via_nubus_irq(int, void *);
void via_irq_enable(int irq); void via_irq_enable(int irq);
void via_irq_disable(int irq); void via_irq_disable(int irq);
void via_irq_clear(int irq); void via_irq_clear(int irq);
extern irqreturn_t mac_scc_dispatch(int, void *, struct pt_regs *); extern irqreturn_t mac_scc_dispatch(int, void *);
extern int oss_present; extern int oss_present;
/* /*
...@@ -235,7 +235,7 @@ void __init via_init(void) ...@@ -235,7 +235,7 @@ void __init via_init(void)
* Start the 100 Hz clock * Start the 100 Hz clock
*/ */
void __init via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *)) void __init via_init_clock(irqreturn_t (*func)(int, void *))
{ {
via1[vACR] |= 0x40; via1[vACR] |= 0x40;
via1[vT1LL] = MAC_CLOCK_LOW; via1[vT1LL] = MAC_CLOCK_LOW;
...@@ -412,7 +412,7 @@ void __init via_nubus_init(void) ...@@ -412,7 +412,7 @@ void __init via_nubus_init(void)
* the machspec interrupt number after clearing the interrupt. * the machspec interrupt number after clearing the interrupt.
*/ */
irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t via1_irq(int irq, void *dev_id)
{ {
int irq_bit, i; int irq_bit, i;
unsigned char events, mask; unsigned char events, mask;
...@@ -424,7 +424,7 @@ irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -424,7 +424,7 @@ irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs)
for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1)
if (events & irq_bit) { if (events & irq_bit) {
via1[vIER] = irq_bit; via1[vIER] = irq_bit;
m68k_handle_int(VIA1_SOURCE_BASE + i, regs); m68k_handle_int(VIA1_SOURCE_BASE + i);
via1[vIFR] = irq_bit; via1[vIFR] = irq_bit;
via1[vIER] = irq_bit | 0x80; via1[vIER] = irq_bit | 0x80;
} }
...@@ -439,14 +439,14 @@ irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -439,14 +439,14 @@ irqreturn_t via1_irq(int irq, void *dev_id, struct pt_regs *regs)
/* No, it won't be set. that's why we're doing this. */ /* No, it won't be set. that's why we're doing this. */
via_irq_disable(IRQ_MAC_NUBUS); via_irq_disable(IRQ_MAC_NUBUS);
via_irq_clear(IRQ_MAC_NUBUS); via_irq_clear(IRQ_MAC_NUBUS);
m68k_handle_int(IRQ_MAC_NUBUS, regs); m68k_handle_int(IRQ_MAC_NUBUS);
via_irq_enable(IRQ_MAC_NUBUS); via_irq_enable(IRQ_MAC_NUBUS);
} }
#endif #endif
return IRQ_HANDLED; return IRQ_HANDLED;
} }
irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t via2_irq(int irq, void *dev_id)
{ {
int irq_bit, i; int irq_bit, i;
unsigned char events, mask; unsigned char events, mask;
...@@ -459,7 +459,7 @@ irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -459,7 +459,7 @@ irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs)
if (events & irq_bit) { if (events & irq_bit) {
via2[gIER] = irq_bit; via2[gIER] = irq_bit;
via2[gIFR] = irq_bit | rbv_clear; via2[gIFR] = irq_bit | rbv_clear;
m68k_handle_int(VIA2_SOURCE_BASE + i, regs); m68k_handle_int(VIA2_SOURCE_BASE + i);
via2[gIER] = irq_bit | 0x80; via2[gIER] = irq_bit | 0x80;
} }
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -470,7 +470,7 @@ irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -470,7 +470,7 @@ irqreturn_t via2_irq(int irq, void *dev_id, struct pt_regs *regs)
* VIA2 dispatcher as a fast interrupt handler. * VIA2 dispatcher as a fast interrupt handler.
*/ */
irqreturn_t via_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t via_nubus_irq(int irq, void *dev_id)
{ {
int irq_bit, i; int irq_bit, i;
unsigned char events; unsigned char events;
...@@ -481,7 +481,7 @@ irqreturn_t via_nubus_irq(int irq, void *dev_id, struct pt_regs *regs) ...@@ -481,7 +481,7 @@ irqreturn_t via_nubus_irq(int irq, void *dev_id, struct pt_regs *regs)
for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) { for (i = 0, irq_bit = 1 ; i < 7 ; i++, irq_bit <<= 1) {
if (events & irq_bit) { if (events & irq_bit) {
via_irq_disable(NUBUS_SOURCE_BASE + i); via_irq_disable(NUBUS_SOURCE_BASE + i);
m68k_handle_int(NUBUS_SOURCE_BASE + i, regs); m68k_handle_int(NUBUS_SOURCE_BASE + i);
via_irq_enable(NUBUS_SOURCE_BASE + i); via_irq_enable(NUBUS_SOURCE_BASE + i);
} }
} }
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
static void mvme147_get_model(char *model); static void mvme147_get_model(char *model);
static int mvme147_get_hardware_list(char *buffer); static int mvme147_get_hardware_list(char *buffer);
extern void mvme147_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); extern void mvme147_sched_init(irqreturn_t (*handler)(int, void *));
extern unsigned long mvme147_gettimeoffset (void); extern unsigned long mvme147_gettimeoffset (void);
extern int mvme147_hwclk (int, struct rtc_time *); extern int mvme147_hwclk (int, struct rtc_time *);
extern int mvme147_set_clock_mmss (unsigned long); extern int mvme147_set_clock_mmss (unsigned long);
...@@ -51,7 +51,7 @@ static int bcd2int (unsigned char b); ...@@ -51,7 +51,7 @@ static int bcd2int (unsigned char b);
/* Save tick handler routine pointer, will point to do_timer() in /* Save tick handler routine pointer, will point to do_timer() in
* kernel/sched.c, called via mvme147_process_int() */ * kernel/sched.c, called via mvme147_process_int() */
irqreturn_t (*tick_handler)(int, void *, struct pt_regs *); irqreturn_t (*tick_handler)(int, void *);
int mvme147_parse_bootinfo(const struct bi_record *bi) int mvme147_parse_bootinfo(const struct bi_record *bi)
...@@ -114,15 +114,15 @@ void __init config_mvme147(void) ...@@ -114,15 +114,15 @@ void __init config_mvme147(void)
/* Using pcc tick timer 1 */ /* Using pcc tick timer 1 */
static irqreturn_t mvme147_timer_int (int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t mvme147_timer_int (int irq, void *dev_id)
{ {
m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR; m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR;
m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1;
return tick_handler(irq, dev_id, fp); return tick_handler(irq, dev_id);
} }
void mvme147_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) void mvme147_sched_init (irqreturn_t (*timer_routine)(int, void *))
{ {
tick_handler = timer_routine; tick_handler = timer_routine;
request_irq (PCC_IRQ_TIMER1, mvme147_timer_int, request_irq (PCC_IRQ_TIMER1, mvme147_timer_int,
......
...@@ -42,7 +42,7 @@ static MK48T08ptr_t volatile rtc = (MK48T08ptr_t)MVME_RTC_BASE; ...@@ -42,7 +42,7 @@ static MK48T08ptr_t volatile rtc = (MK48T08ptr_t)MVME_RTC_BASE;
static void mvme16x_get_model(char *model); static void mvme16x_get_model(char *model);
static int mvme16x_get_hardware_list(char *buffer); static int mvme16x_get_hardware_list(char *buffer);
extern void mvme16x_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); extern void mvme16x_sched_init(irqreturn_t (*handler)(int, void *));
extern unsigned long mvme16x_gettimeoffset (void); extern unsigned long mvme16x_gettimeoffset (void);
extern int mvme16x_hwclk (int, struct rtc_time *); extern int mvme16x_hwclk (int, struct rtc_time *);
extern int mvme16x_set_clock_mmss (unsigned long); extern int mvme16x_set_clock_mmss (unsigned long);
...@@ -54,7 +54,7 @@ int bcd2int (unsigned char b); ...@@ -54,7 +54,7 @@ int bcd2int (unsigned char b);
/* Save tick handler routine pointer, will point to do_timer() in /* Save tick handler routine pointer, will point to do_timer() in
* kernel/sched.c, called via mvme16x_process_int() */ * kernel/sched.c, called via mvme16x_process_int() */
static irqreturn_t (*tick_handler)(int, void *, struct pt_regs *); static irqreturn_t (*tick_handler)(int, void *);
unsigned short mvme16x_config; unsigned short mvme16x_config;
...@@ -190,7 +190,7 @@ void __init config_mvme16x(void) ...@@ -190,7 +190,7 @@ void __init config_mvme16x(void)
} }
} }
static irqreturn_t mvme16x_abort_int (int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t mvme16x_abort_int (int irq, void *dev_id)
{ {
p_bdid p = &mvme_bdid; p_bdid p = &mvme_bdid;
unsigned long *new = (unsigned long *)vectors; unsigned long *new = (unsigned long *)vectors;
...@@ -218,13 +218,13 @@ static irqreturn_t mvme16x_abort_int (int irq, void *dev_id, struct pt_regs *fp) ...@@ -218,13 +218,13 @@ static irqreturn_t mvme16x_abort_int (int irq, void *dev_id, struct pt_regs *fp)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static irqreturn_t mvme16x_timer_int (int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t mvme16x_timer_int (int irq, void *dev_id)
{ {
*(volatile unsigned char *)0xfff4201b |= 8; *(volatile unsigned char *)0xfff4201b |= 8;
return tick_handler(irq, dev_id, fp); return tick_handler(irq, dev_id);
} }
void mvme16x_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) void mvme16x_sched_init (irqreturn_t (*timer_routine)(int, void *))
{ {
p_bdid p = &mvme_bdid; p_bdid p = &mvme_bdid;
int irq; int irq;
......
...@@ -39,7 +39,7 @@ extern irqreturn_t q40_process_int (int level, struct pt_regs *regs); ...@@ -39,7 +39,7 @@ extern irqreturn_t q40_process_int (int level, struct pt_regs *regs);
extern void q40_init_IRQ (void); extern void q40_init_IRQ (void);
static void q40_get_model(char *model); static void q40_get_model(char *model);
static int q40_get_hardware_list(char *buffer); static int q40_get_hardware_list(char *buffer);
extern void q40_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *)); extern void q40_sched_init(irqreturn_t (*handler)(int, void *));
extern unsigned long q40_gettimeoffset (void); extern unsigned long q40_gettimeoffset (void);
extern int q40_hwclk (int, struct rtc_time *); extern int q40_hwclk (int, struct rtc_time *);
......
...@@ -125,9 +125,9 @@ void q40_mksound(unsigned int hz, unsigned int ticks) ...@@ -125,9 +125,9 @@ void q40_mksound(unsigned int hz, unsigned int ticks)
sound_ticks = ticks << 1; sound_ticks = ticks << 1;
} }
static irqreturn_t (*q40_timer_routine)(int, void *, struct pt_regs *); static irqreturn_t (*q40_timer_routine)(int, void *);
static irqreturn_t q40_timer_int (int irq, void * dev, struct pt_regs * regs) static irqreturn_t q40_timer_int (int irq, void * dev)
{ {
ql_ticks = ql_ticks ? 0 : 1; ql_ticks = ql_ticks ? 0 : 1;
if (sound_ticks) { if (sound_ticks) {
...@@ -138,11 +138,11 @@ static irqreturn_t q40_timer_int (int irq, void * dev, struct pt_regs * regs) ...@@ -138,11 +138,11 @@ static irqreturn_t q40_timer_int (int irq, void * dev, struct pt_regs * regs)
} }
if (!ql_ticks) if (!ql_ticks)
q40_timer_routine(irq, dev, regs); q40_timer_routine(irq, dev);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
void q40_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) void q40_sched_init (irqreturn_t (*timer_routine)(int, void *))
{ {
int timer_irq; int timer_irq;
...@@ -218,11 +218,11 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) ...@@ -218,11 +218,11 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp)
switch (irq) { switch (irq) {
case 4: case 4:
case 6: case 6:
m68k_handle_int(Q40_IRQ_SAMPLE, fp); __m68k_handle_int(Q40_IRQ_SAMPLE, fp);
return; return;
} }
if (mir & Q40_IRQ_FRAME_MASK) { if (mir & Q40_IRQ_FRAME_MASK) {
m68k_handle_int(Q40_IRQ_FRAME, fp); __m68k_handle_int(Q40_IRQ_FRAME, fp);
master_outb(-1, FRAME_CLEAR_REG); master_outb(-1, FRAME_CLEAR_REG);
} }
if ((mir & Q40_IRQ_SER_MASK) || (mir & Q40_IRQ_EXT_MASK)) { if ((mir & Q40_IRQ_SER_MASK) || (mir & Q40_IRQ_EXT_MASK)) {
...@@ -257,7 +257,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) ...@@ -257,7 +257,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp)
goto iirq; goto iirq;
} }
q40_state[irq] |= IRQ_INPROGRESS; q40_state[irq] |= IRQ_INPROGRESS;
m68k_handle_int(irq, fp); __m68k_handle_int(irq, fp);
q40_state[irq] &= ~IRQ_INPROGRESS; q40_state[irq] &= ~IRQ_INPROGRESS;
/* naively enable everything, if that fails than */ /* naively enable everything, if that fails than */
...@@ -288,7 +288,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp) ...@@ -288,7 +288,7 @@ static void q40_irq_handler(unsigned int irq, struct pt_regs *fp)
mir = master_inb(IIRQ_REG); mir = master_inb(IIRQ_REG);
/* should test whether keyboard irq is really enabled, doing it in defhand */ /* should test whether keyboard irq is really enabled, doing it in defhand */
if (mir & Q40_IRQ_KEYB_MASK) if (mir & Q40_IRQ_KEYB_MASK)
m68k_handle_int(Q40_IRQ_KEYBOARD, fp); __m68k_handle_int(Q40_IRQ_KEYBOARD, fp);
return; return;
} }
......
...@@ -162,7 +162,7 @@ void __init config_sun3(void) ...@@ -162,7 +162,7 @@ void __init config_sun3(void)
sun3_bootmem_alloc(memory_start, memory_end); sun3_bootmem_alloc(memory_start, memory_end);
} }
void __init sun3_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) void __init sun3_sched_init(irqreturn_t (*timer_routine)(int, void *))
{ {
sun3_disable_interrupts(); sun3_disable_interrupts();
intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE); intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <asm/intersil.h> #include <asm/intersil.h>
#include <asm/oplib.h> #include <asm/oplib.h>
#include <asm/sun3ints.h> #include <asm/sun3ints.h>
#include <asm/irq_regs.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
extern void sun3_leds (unsigned char); extern void sun3_leds (unsigned char);
...@@ -48,7 +49,7 @@ void sun3_disable_irq(unsigned int irq) ...@@ -48,7 +49,7 @@ void sun3_disable_irq(unsigned int irq)
*sun3_intreg &= ~(1 << irq); *sun3_intreg &= ~(1 << irq);
} }
static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t sun3_int7(int irq, void *dev_id)
{ {
*sun3_intreg |= (1 << irq); *sun3_intreg |= (1 << irq);
if (!(kstat_cpu(0).irqs[irq] % 2000)) if (!(kstat_cpu(0).irqs[irq] % 2000))
...@@ -56,7 +57,7 @@ static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp) ...@@ -56,7 +57,7 @@ static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static irqreturn_t sun3_int5(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t sun3_int5(int irq, void *dev_id)
{ {
#ifdef CONFIG_SUN3 #ifdef CONFIG_SUN3
intersil_clear(); intersil_clear();
...@@ -67,14 +68,14 @@ static irqreturn_t sun3_int5(int irq, void *dev_id, struct pt_regs *fp) ...@@ -67,14 +68,14 @@ static irqreturn_t sun3_int5(int irq, void *dev_id, struct pt_regs *fp)
#endif #endif
do_timer(1); do_timer(1);
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
update_process_times(user_mode(fp)); update_process_times(user_mode(get_irq_regs()));
#endif #endif
if (!(kstat_cpu(0).irqs[irq] % 20)) if (!(kstat_cpu(0).irqs[irq] % 20))
sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]); sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static irqreturn_t sun3_vec255(int irq, void *dev_id, struct pt_regs *fp) static irqreturn_t sun3_vec255(int irq, void *dev_id)
{ {
// intersil_clear(); // intersil_clear();
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -84,7 +85,7 @@ static void sun3_inthandle(unsigned int irq, struct pt_regs *fp) ...@@ -84,7 +85,7 @@ static void sun3_inthandle(unsigned int irq, struct pt_regs *fp)
{ {
*sun3_intreg &= ~(1 << irq); *sun3_intreg &= ~(1 << irq);
m68k_handle_int(irq, fp); __m68k_handle_int(irq, fp);
} }
static struct irq_controller sun3_irq_controller = { static struct irq_controller sun3_irq_controller = {
......
...@@ -90,7 +90,7 @@ static void sun3x_timer_tick(int irq, void *dev_id, struct pt_regs *regs) ...@@ -90,7 +90,7 @@ static void sun3x_timer_tick(int irq, void *dev_id, struct pt_regs *regs)
} }
#endif #endif
void __init sun3x_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) void __init sun3x_sched_init(irqreturn_t (*vector)(int, void *))
{ {
sun3_disable_interrupts(); sun3_disable_interrupts();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
extern int sun3x_hwclk(int set, struct rtc_time *t); extern int sun3x_hwclk(int set, struct rtc_time *t);
unsigned long sun3x_gettimeoffset (void); unsigned long sun3x_gettimeoffset (void);
void sun3x_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)); void sun3x_sched_init(irqreturn_t (*vector)(int, void *));
struct mostek_dt { struct mostek_dt {
volatile unsigned char csr; volatile unsigned char csr;
......
...@@ -593,7 +593,7 @@ static void scc_enable_tx_interrupts(void *ptr) ...@@ -593,7 +593,7 @@ static void scc_enable_tx_interrupts(void *ptr)
local_irq_save(flags); local_irq_save(flags);
SCCmod(INT_AND_DMA_REG, 0xff, IDR_TX_INT_ENAB); SCCmod(INT_AND_DMA_REG, 0xff, IDR_TX_INT_ENAB);
/* restart the transmitter */ /* restart the transmitter */
scc_tx_int (0, port, 0); scc_tx_int (0, port);
local_irq_restore(flags); local_irq_restore(flags);
} }
......
...@@ -266,7 +266,7 @@ int adb_iop_autopoll(int devs) ...@@ -266,7 +266,7 @@ int adb_iop_autopoll(int devs)
void adb_iop_poll(void) void adb_iop_poll(void)
{ {
if (adb_iop_state == idle) adb_iop_start(); if (adb_iop_state == idle) adb_iop_start();
iop_ism_irq(0, (void *) ADB_IOP, NULL); iop_ism_irq(0, (void *) ADB_IOP);
} }
int adb_iop_reset_bus(void) int adb_iop_reset_bus(void)
......
...@@ -295,7 +295,7 @@ static void macii_poll(void) ...@@ -295,7 +295,7 @@ static void macii_poll(void)
unsigned long flags; unsigned long flags;
local_irq_save(flags); local_irq_save(flags);
if (via[IFR] & SR_INT) macii_interrupt(0, NULL, NULL); if (via[IFR] & SR_INT) macii_interrupt(0, NULL);
local_irq_restore(flags); local_irq_restore(flags);
} }
......
...@@ -421,7 +421,7 @@ maciisi_poll(void) ...@@ -421,7 +421,7 @@ maciisi_poll(void)
local_irq_save(flags); local_irq_save(flags);
if (via[IFR] & SR_INT) { if (via[IFR] & SR_INT) {
maciisi_interrupt(0, NULL, NULL); maciisi_interrupt(0, NULL);
} }
else /* avoid calling this function too quickly in a loop */ else /* avoid calling this function too quickly in a loop */
udelay(ADB_DELAY); udelay(ADB_DELAY);
......
...@@ -221,7 +221,7 @@ pmu_init(void) ...@@ -221,7 +221,7 @@ pmu_init(void)
} }
if (pmu_state == idle) { if (pmu_state == idle) {
adb_int_pending = 1; adb_int_pending = 1;
pmu_interrupt(0, NULL, NULL); pmu_interrupt(0, NULL);
} }
pmu_poll(); pmu_poll();
udelay(10); udelay(10);
...@@ -562,11 +562,11 @@ pmu_poll(void) ...@@ -562,11 +562,11 @@ pmu_poll(void)
local_irq_save(flags); local_irq_save(flags);
if (via1[IFR] & SR_INT) { if (via1[IFR] & SR_INT) {
via1[IFR] = SR_INT; via1[IFR] = SR_INT;
pmu_interrupt(IRQ_MAC_ADB_SR, NULL, NULL); pmu_interrupt(IRQ_MAC_ADB_SR, NULL);
} }
if (via1[IFR] & CB1_INT) { if (via1[IFR] & CB1_INT) {
via1[IFR] = CB1_INT; via1[IFR] = CB1_INT;
pmu_interrupt(IRQ_MAC_ADB_CL, NULL, NULL); pmu_interrupt(IRQ_MAC_ADB_CL, NULL);
} }
local_irq_restore(flags); local_irq_restore(flags);
} }
......
...@@ -674,7 +674,7 @@ void lance_poll(struct net_device *dev) ...@@ -674,7 +674,7 @@ void lance_poll(struct net_device *dev)
WRITERAP(lp, LE_CSR0); WRITERAP(lp, LE_CSR0);
WRITERDP(lp, LE_C0_STRT); WRITERDP(lp, LE_C0_STRT);
spin_unlock (&lp->devlock); spin_unlock (&lp->devlock);
lance_interrupt(dev->irq, dev, NULL); lance_interrupt(dev->irq, dev);
} }
#endif #endif
......
...@@ -219,7 +219,7 @@ static irqreturn_t mfc3_interrupt(int irq, void *dev_id) ...@@ -219,7 +219,7 @@ static irqreturn_t mfc3_interrupt(int irq, void *dev_id)
if (this_port[i] != NULL) if (this_port[i] != NULL)
if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */ if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */
dummy = pia(this_port[i])->pprb; /* clear irq bit */ dummy = pia(this_port[i])->pprb; /* clear irq bit */
parport_generic_irq(irq, this_port[i], regs); parport_generic_irq(irq, this_port[i]);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
/***************************** Prototypes *****************************/ /***************************** Prototypes *****************************/
void stdma_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), void stdma_lock(irqreturn_t (*handler)(int, void *), void *data);
void *data);
void stdma_release( void ); void stdma_release( void );
int stdma_others_waiting( void ); int stdma_others_waiting( void );
int stdma_islocked( void ); int stdma_islocked( void );
......
...@@ -17,8 +17,7 @@ ...@@ -17,8 +17,7 @@
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id);
struct pt_regs *regs);
/* constants... */ /* constants... */
...@@ -184,8 +183,7 @@ static void fd_disable_dma(void) ...@@ -184,8 +183,7 @@ static void fd_disable_dma(void)
/* this is the only truly Q40 specific function */ /* this is the only truly Q40 specific function */
asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id)
struct pt_regs *regs)
{ {
register unsigned char st; register unsigned char st;
...@@ -198,7 +196,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, ...@@ -198,7 +196,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id,
static int dma_wait=0; static int dma_wait=0;
#endif #endif
if(!doing_pdma) { if(!doing_pdma) {
floppy_interrupt(irq, dev_id, regs); floppy_interrupt(irq, dev_id);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -246,7 +244,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id, ...@@ -246,7 +244,7 @@ asmlinkage irqreturn_t floppy_hardint(int irq, void *dev_id,
dma_wait=0; dma_wait=0;
#endif #endif
doing_pdma = 0; doing_pdma = 0;
floppy_interrupt(irq, dev_id, regs); floppy_interrupt(irq, dev_id);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
#ifdef TRACE_FLPY_INT #ifdef TRACE_FLPY_INT
......
...@@ -123,7 +123,7 @@ static __inline__ void ide_release_lock (void) ...@@ -123,7 +123,7 @@ static __inline__ void ide_release_lock (void)
} }
static __inline__ void static __inline__ void
ide_get_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), void *data) ide_get_lock(irqreturn_t (*handler)(int, void *), void *data)
{ {
if (MACH_IS_ATARI) { if (MACH_IS_ATARI) {
if (falconide_intr_lock == 0) { if (falconide_intr_lock == 0) {
......
...@@ -83,7 +83,7 @@ struct pt_regs; ...@@ -83,7 +83,7 @@ struct pt_regs;
* interrupt source (if it supports chaining). * interrupt source (if it supports chaining).
*/ */
typedef struct irq_node { typedef struct irq_node {
int (*handler)(int, void *, struct pt_regs *); int (*handler)(int, void *);
void *dev_id; void *dev_id;
struct irq_node *next; struct irq_node *next;
unsigned long flags; unsigned long flags;
...@@ -93,12 +93,12 @@ typedef struct irq_node { ...@@ -93,12 +93,12 @@ typedef struct irq_node {
/* /*
* This structure has only 4 elements for speed reasons * This structure has only 4 elements for speed reasons
*/ */
typedef struct irq_handler { struct irq_handler {
int (*handler)(int, void *, struct pt_regs *); int (*handler)(int, void *);
unsigned long flags; unsigned long flags;
void *dev_id; void *dev_id;
const char *devname; const char *devname;
} irq_handler_t; };
struct irq_controller { struct irq_controller {
const char *name; const char *name;
...@@ -122,6 +122,7 @@ extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, ...@@ -122,6 +122,7 @@ extern void m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt,
void (*handler)(unsigned int, struct pt_regs *)); void (*handler)(unsigned int, struct pt_regs *));
extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int); extern void m68k_setup_irq_controller(struct irq_controller *, unsigned int, unsigned int);
asmlinkage void m68k_handle_int(unsigned int, struct pt_regs *); asmlinkage void m68k_handle_int(unsigned int);
asmlinkage void __m68k_handle_int(unsigned int, struct pt_regs *);
#endif /* _M68K_IRQ_H_ */ #endif /* _M68K_IRQ_H_ */
...@@ -143,17 +143,17 @@ struct iop_msg { ...@@ -143,17 +143,17 @@ struct iop_msg {
int status; /* status of this message */ int status; /* status of this message */
__u8 message[IOP_MSG_LEN]; /* the message being sent/received */ __u8 message[IOP_MSG_LEN]; /* the message being sent/received */
__u8 reply[IOP_MSG_LEN]; /* the reply to the message */ __u8 reply[IOP_MSG_LEN]; /* the reply to the message */
void (*handler)(struct iop_msg *, struct pt_regs *); void (*handler)(struct iop_msg *);
/* function to call when reply recvd */ /* function to call when reply recvd */
}; };
extern int iop_scc_present,iop_ism_present; extern int iop_scc_present,iop_ism_present;
extern int iop_listen(uint, uint, extern int iop_listen(uint, uint,
void (*handler)(struct iop_msg *, struct pt_regs *), void (*handler)(struct iop_msg *),
const char *); const char *);
extern int iop_send_message(uint, uint, void *, uint, __u8 *, extern int iop_send_message(uint, uint, void *, uint, __u8 *,
void (*)(struct iop_msg *, struct pt_regs *)); void (*)(struct iop_msg *));
extern void iop_complete_message(struct iop_msg *); extern void iop_complete_message(struct iop_msg *);
extern void iop_upload_code(uint, __u8 *, uint, __u16); extern void iop_upload_code(uint, __u8 *, uint, __u16);
extern void iop_download_code(uint, __u8 *, uint, __u16); extern void iop_download_code(uint, __u8 *, uint, __u16);
......
...@@ -10,7 +10,7 @@ struct rtc_time; ...@@ -10,7 +10,7 @@ struct rtc_time;
struct rtc_pll_info; struct rtc_pll_info;
struct buffer_head; struct buffer_head;
extern void (*mach_sched_init) (irqreturn_t (*handler)(int, void *, struct pt_regs *)); extern void (*mach_sched_init) (irqreturn_t (*handler)(int, void *));
/* machine dependent irq functions */ /* machine dependent irq functions */
extern void (*mach_init_IRQ) (void); extern void (*mach_init_IRQ) (void);
extern void (*mach_get_model) (char *model); extern void (*mach_get_model) (char *model);
......
...@@ -111,8 +111,7 @@ static void sun3x_82072_fd_outb(unsigned char value, int port) ...@@ -111,8 +111,7 @@ static void sun3x_82072_fd_outb(unsigned char value, int port)
} }
asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id)
struct pt_regs * regs)
{ {
register unsigned char st; register unsigned char st;
...@@ -125,7 +124,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, ...@@ -125,7 +124,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id,
static int dma_wait=0; static int dma_wait=0;
#endif #endif
if(!doing_pdma) { if(!doing_pdma) {
floppy_interrupt(irq, dev_id, regs); floppy_interrupt(irq, dev_id);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -189,7 +188,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id, ...@@ -189,7 +188,7 @@ asmlinkage irqreturn_t sun3xflop_hardint(int irq, void *dev_id,
dma_wait=0; dma_wait=0;
#endif #endif
floppy_interrupt(irq, dev_id, regs); floppy_interrupt(irq, dev_id);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment