mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-08 14:13:53 +00:00
[PATCH] alpha pt_regs cleanups: device_interrupt
callers of ->device_interrupt() do set_irq_regs() now; pt_regs argument removed, remaining uses of regs in instances of ->device_interrupt() are switched to get_irq_regs() and will be gone in the next patch. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8dab42a967
commit
7ca56053b2
@ -39,6 +39,7 @@ asmlinkage void
|
|||||||
do_entInt(unsigned long type, unsigned long vector,
|
do_entInt(unsigned long type, unsigned long vector,
|
||||||
unsigned long la_ptr, struct pt_regs *regs)
|
unsigned long la_ptr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *old_regs;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0:
|
case 0:
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
@ -72,7 +73,9 @@ do_entInt(unsigned long type, unsigned long vector,
|
|||||||
alpha_mv.machine_check(vector, la_ptr, regs);
|
alpha_mv.machine_check(vector, la_ptr, regs);
|
||||||
return;
|
return;
|
||||||
case 3:
|
case 3:
|
||||||
alpha_mv.device_interrupt(vector, regs);
|
old_regs = set_irq_regs(regs);
|
||||||
|
alpha_mv.device_interrupt(vector);
|
||||||
|
set_irq_regs(old_regs);
|
||||||
return;
|
return;
|
||||||
case 4:
|
case 4:
|
||||||
perf_irq(la_ptr, regs);
|
perf_irq(la_ptr, regs);
|
||||||
|
@ -137,7 +137,7 @@ init_i8259a_irqs(void)
|
|||||||
|
|
||||||
#if defined(IACK_SC)
|
#if defined(IACK_SC)
|
||||||
void
|
void
|
||||||
isa_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
isa_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Generate a PCI interrupt acknowledge cycle. The PIC will
|
* Generate a PCI interrupt acknowledge cycle. The PIC will
|
||||||
@ -147,7 +147,7 @@ isa_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
*/
|
*/
|
||||||
int j = *(vuip) IACK_SC;
|
int j = *(vuip) IACK_SC;
|
||||||
j &= 0xff;
|
j &= 0xff;
|
||||||
handle_irq(j, regs);
|
handle_irq(j, get_irq_regs());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
|
|
||||||
#define RTC_IRQ 8
|
#define RTC_IRQ 8
|
||||||
|
|
||||||
extern void isa_device_interrupt(unsigned long, struct pt_regs *);
|
extern void isa_device_interrupt(unsigned long);
|
||||||
extern void isa_no_iack_sc_device_interrupt(unsigned long, struct pt_regs *);
|
extern void isa_no_iack_sc_device_interrupt(unsigned long, struct pt_regs *);
|
||||||
extern void srm_device_interrupt(unsigned long, struct pt_regs *);
|
extern void srm_device_interrupt(unsigned long);
|
||||||
extern void pyxis_device_interrupt(unsigned long, struct pt_regs *);
|
extern void pyxis_device_interrupt(unsigned long);
|
||||||
|
|
||||||
extern struct irqaction timer_irqaction;
|
extern struct irqaction timer_irqaction;
|
||||||
extern struct irqaction isa_cascade_irqaction;
|
extern struct irqaction isa_cascade_irqaction;
|
||||||
|
@ -81,7 +81,7 @@ static struct hw_interrupt_type pyxis_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
pyxis_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
pyxis_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -98,9 +98,9 @@ pyxis_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i == 7)
|
if (i == 7)
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
else
|
else
|
||||||
handle_irq(16+i, regs);
|
handle_irq(16+i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,8 +72,8 @@ init_srm_irqs(long max, unsigned long ignore_mask)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq = (vector - 0x800) >> 4;
|
int irq = (vector - 0x800) >> 4;
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ static struct hw_interrupt_type alcor_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
alcor_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
alcor_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -116,9 +116,9 @@ alcor_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i == 31) {
|
if (i == 31) {
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
} else {
|
} else {
|
||||||
handle_irq(16 + i, regs);
|
handle_irq(16 + i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ static struct hw_interrupt_type cabriolet_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cabriolet_device_interrupt(unsigned long v, struct pt_regs *r)
|
cabriolet_device_interrupt(unsigned long v)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -98,15 +98,15 @@ cabriolet_device_interrupt(unsigned long v, struct pt_regs *r)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i == 4) {
|
if (i == 4) {
|
||||||
isa_device_interrupt(v, r);
|
isa_device_interrupt(v);
|
||||||
} else {
|
} else {
|
||||||
handle_irq(16 + i, r);
|
handle_irq(16 + i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
common_init_irq(void (*srm_dev_int)(unsigned long v, struct pt_regs *r))
|
common_init_irq(void (*srm_dev_int)(unsigned long v))
|
||||||
{
|
{
|
||||||
init_i8259a_irqs();
|
init_i8259a_irqs();
|
||||||
|
|
||||||
@ -154,18 +154,18 @@ cabriolet_init_irq(void)
|
|||||||
too invasive though. */
|
too invasive though. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pc164_srm_device_interrupt(unsigned long v, struct pt_regs *r)
|
pc164_srm_device_interrupt(unsigned long v)
|
||||||
{
|
{
|
||||||
__min_ipl = getipl();
|
__min_ipl = getipl();
|
||||||
srm_device_interrupt(v, r);
|
srm_device_interrupt(v);
|
||||||
__min_ipl = 0;
|
__min_ipl = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pc164_device_interrupt(unsigned long v, struct pt_regs *r)
|
pc164_device_interrupt(unsigned long v)
|
||||||
{
|
{
|
||||||
__min_ipl = getipl();
|
__min_ipl = getipl();
|
||||||
cabriolet_device_interrupt(v, r);
|
cabriolet_device_interrupt(v);
|
||||||
__min_ipl = 0;
|
__min_ipl = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ static struct hw_interrupt_type clipper_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dp264_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
dp264_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
#if 1
|
#if 1
|
||||||
printk("dp264_device_interrupt: NOT IMPLEMENTED YET!! \n");
|
printk("dp264_device_interrupt: NOT IMPLEMENTED YET!! \n");
|
||||||
@ -236,9 +236,9 @@ dp264_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i == 55)
|
if (i == 55)
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
else
|
else
|
||||||
handle_irq(16 + i, 16 + i, regs);
|
handle_irq(16 + i, get_irq_regs());
|
||||||
#if 0
|
#if 0
|
||||||
TSUNAMI_cchip->dir0.csr = 1UL << i; mb();
|
TSUNAMI_cchip->dir0.csr = 1UL << i; mb();
|
||||||
tmp = TSUNAMI_cchip->dir0.csr;
|
tmp = TSUNAMI_cchip->dir0.csr;
|
||||||
@ -248,7 +248,7 @@ dp264_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dp264_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
dp264_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -268,11 +268,11 @@ dp264_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
if (irq >= 32)
|
if (irq >= 32)
|
||||||
irq -= 16;
|
irq -= 16;
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clipper_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
clipper_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ clipper_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
*
|
*
|
||||||
* Eg IRQ 24 is DRIR bit 8, etc, etc
|
* Eg IRQ 24 is DRIR bit 8, etc, etc
|
||||||
*/
|
*/
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -80,7 +80,7 @@ static struct hw_interrupt_type eb64p_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
eb64p_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -97,9 +97,9 @@ eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
|
|
||||||
if (i == 5) {
|
if (i == 5) {
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
} else {
|
} else {
|
||||||
handle_irq(16 + i, regs);
|
handle_irq(16 + i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ static struct hw_interrupt_type eiger_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eiger_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
eiger_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned intstatus;
|
unsigned intstatus;
|
||||||
|
|
||||||
@ -118,20 +118,20 @@ eiger_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
* despatch an interrupt if it's set.
|
* despatch an interrupt if it's set.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (intstatus & 8) handle_irq(16+3, regs);
|
if (intstatus & 8) handle_irq(16+3, get_irq_regs());
|
||||||
if (intstatus & 4) handle_irq(16+2, regs);
|
if (intstatus & 4) handle_irq(16+2, get_irq_regs());
|
||||||
if (intstatus & 2) handle_irq(16+1, regs);
|
if (intstatus & 2) handle_irq(16+1, get_irq_regs());
|
||||||
if (intstatus & 1) handle_irq(16+0, regs);
|
if (intstatus & 1) handle_irq(16+0, get_irq_regs());
|
||||||
} else {
|
} else {
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eiger_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
eiger_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq = (vector - 0x800) >> 4;
|
int irq = (vector - 0x800) >> 4;
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -129,7 +129,7 @@ static struct hw_interrupt_type jensen_local_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
jensen_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
jensen_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ jensen_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
if (cc - last_msg > ((JENSEN_CYCLES_PER_SEC) * 3) ||
|
if (cc - last_msg > ((JENSEN_CYCLES_PER_SEC) * 3) ||
|
||||||
irq != last_irq) {
|
irq != last_irq) {
|
||||||
printk(KERN_CRIT " irq %d count %d cc %u @ %lx\n",
|
printk(KERN_CRIT " irq %d count %d cc %u @ %lx\n",
|
||||||
irq, count, cc-last_cc, regs->pc);
|
irq, count, cc-last_cc, get_irq_regs()->pc);
|
||||||
count = 0;
|
count = 0;
|
||||||
last_msg = cc;
|
last_msg = cc;
|
||||||
last_irq = irq;
|
last_irq = irq;
|
||||||
@ -198,7 +198,7 @@ jensen_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
* Interrupt handling.
|
* Interrupt handling.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
io7_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
io7_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned int pid;
|
unsigned int pid;
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
@ -64,7 +64,7 @@ io7_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
irq &= MARVEL_IRQ_VEC_IRQ_MASK; /* not too many bits */
|
irq &= MARVEL_IRQ_VEC_IRQ_MASK; /* not too many bits */
|
||||||
irq |= pid << MARVEL_IRQ_VEC_PE_SHIFT; /* merge the pid */
|
irq |= pid << MARVEL_IRQ_VEC_PE_SHIFT; /* merge the pid */
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static volatile unsigned long *
|
static volatile unsigned long *
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
miata_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
miata_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ miata_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
if (irq >= 16)
|
if (irq >= 16)
|
||||||
irq = irq + 8;
|
irq = irq + 8;
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -79,7 +79,7 @@ static struct hw_interrupt_type mikasa_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mikasa_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
mikasa_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -97,9 +97,9 @@ mikasa_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i < 16) {
|
if (i < 16) {
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
} else {
|
} else {
|
||||||
handle_irq(i, regs);
|
handle_irq(i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ static struct hw_interrupt_type noritake_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
noritake_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
noritake_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -96,15 +96,15 @@ noritake_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i < 16) {
|
if (i < 16) {
|
||||||
isa_device_interrupt(vector, regs);
|
isa_device_interrupt(vector);
|
||||||
} else {
|
} else {
|
||||||
handle_irq(i, regs);
|
handle_irq(i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
noritake_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
noritake_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ noritake_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
if (irq >= 16)
|
if (irq >= 16)
|
||||||
irq = irq + 1;
|
irq = irq + 1;
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -134,7 +134,7 @@ static struct hw_interrupt_type rawhide_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rawhide_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
rawhide_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ rawhide_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
/* Adjust by which hose it is from. */
|
/* Adjust by which hose it is from. */
|
||||||
irq -= ((irq + 16) >> 2) & 0x38;
|
irq -= ((irq + 16) >> 2) & 0x38;
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -83,7 +83,7 @@ static struct hw_interrupt_type rx164_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rx164_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
rx164_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned long pld;
|
unsigned long pld;
|
||||||
volatile unsigned int *dirr;
|
volatile unsigned int *dirr;
|
||||||
@ -102,9 +102,9 @@ rx164_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
i = ffz(~pld);
|
i = ffz(~pld);
|
||||||
pld &= pld - 1; /* clear least bit set */
|
pld &= pld - 1; /* clear least bit set */
|
||||||
if (i == 20) {
|
if (i == 20) {
|
||||||
isa_no_iack_sc_device_interrupt(vector, regs);
|
isa_no_iack_sc_device_interrupt(vector, get_irq_regs());
|
||||||
} else {
|
} else {
|
||||||
handle_irq(16+i, regs);
|
handle_irq(16+i, get_irq_regs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -512,7 +512,7 @@ static struct hw_interrupt_type sable_lynx_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sable_lynx_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
sable_lynx_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
/* Note that the vector reported by the SRM PALcode corresponds
|
/* Note that the vector reported by the SRM PALcode corresponds
|
||||||
to the interrupt mask bits, but we have to manage via the
|
to the interrupt mask bits, but we have to manage via the
|
||||||
@ -526,7 +526,7 @@ sable_lynx_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
printk("%s: vector 0x%lx bit 0x%x irq 0x%x\n",
|
printk("%s: vector 0x%lx bit 0x%x irq 0x%x\n",
|
||||||
__FUNCTION__, vector, bit, irq);
|
__FUNCTION__, vector, bit, irq);
|
||||||
#endif
|
#endif
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -85,7 +85,7 @@ static struct hw_interrupt_type takara_irq_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
takara_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
takara_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
unsigned intstatus;
|
unsigned intstatus;
|
||||||
|
|
||||||
@ -112,20 +112,20 @@ takara_device_interrupt(unsigned long vector, struct pt_regs *regs)
|
|||||||
* despatch an interrupt if it's set.
|
* despatch an interrupt if it's set.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (intstatus & 8) handle_irq(16+3, regs);
|
if (intstatus & 8) handle_irq(16+3, get_irq_regs());
|
||||||
if (intstatus & 4) handle_irq(16+2, regs);
|
if (intstatus & 4) handle_irq(16+2, get_irq_regs());
|
||||||
if (intstatus & 2) handle_irq(16+1, regs);
|
if (intstatus & 2) handle_irq(16+1, get_irq_regs());
|
||||||
if (intstatus & 1) handle_irq(16+0, regs);
|
if (intstatus & 1) handle_irq(16+0, get_irq_regs());
|
||||||
} else {
|
} else {
|
||||||
isa_device_interrupt (vector, regs);
|
isa_device_interrupt (vector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
takara_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
takara_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq = (vector - 0x800) >> 4;
|
int irq = (vector - 0x800) >> 4;
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -167,18 +167,18 @@ titan_set_irq_affinity(unsigned int irq, cpumask_t affinity)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
titan_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
titan_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
printk("titan_device_interrupt: NOT IMPLEMENTED YET!! \n");
|
printk("titan_device_interrupt: NOT IMPLEMENTED YET!! \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
titan_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
titan_srm_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
irq = (vector - 0x800) >> 4;
|
irq = (vector - 0x800) >> 4;
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -245,6 +245,7 @@ titan_legacy_init_irq(void)
|
|||||||
void
|
void
|
||||||
titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
|
titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *old_regs;
|
||||||
unsigned long vector;
|
unsigned long vector;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -252,6 +253,7 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
|
|||||||
*/
|
*/
|
||||||
mask &= titan_cpu_irq_affinity[smp_processor_id()];
|
mask &= titan_cpu_irq_affinity[smp_processor_id()];
|
||||||
|
|
||||||
|
old_regs = set_irq_regs(regs);
|
||||||
/*
|
/*
|
||||||
* Dispatch all requested interrupts
|
* Dispatch all requested interrupts
|
||||||
*/
|
*/
|
||||||
@ -263,8 +265,9 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
|
|||||||
vector = 0x900 + (vector << 4); /* convert to SRM vector */
|
vector = 0x900 + (vector << 4); /* convert to SRM vector */
|
||||||
|
|
||||||
/* dispatch it */
|
/* dispatch it */
|
||||||
alpha_mv.device_interrupt(vector, regs);
|
alpha_mv.device_interrupt(vector);
|
||||||
}
|
}
|
||||||
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ wildfire_init_irq(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wildfire_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
wildfire_device_interrupt(unsigned long vector)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
@ -246,7 +246,7 @@ wildfire_device_interrupt(unsigned long vector, struct pt_regs * regs)
|
|||||||
* bits 5-0: irq in PCA
|
* bits 5-0: irq in PCA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
handle_irq(irq, regs);
|
handle_irq(irq, get_irq_regs());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ struct alpha_machine_vector
|
|||||||
|
|
||||||
void (*update_irq_hw)(unsigned long, unsigned long, int);
|
void (*update_irq_hw)(unsigned long, unsigned long, int);
|
||||||
void (*ack_irq)(unsigned long);
|
void (*ack_irq)(unsigned long);
|
||||||
void (*device_interrupt)(unsigned long vector, struct pt_regs *regs);
|
void (*device_interrupt)(unsigned long vector);
|
||||||
void (*machine_check)(u64 vector, u64 la, struct pt_regs *regs);
|
void (*machine_check)(u64 vector, u64 la, struct pt_regs *regs);
|
||||||
|
|
||||||
void (*smp_callin)(void);
|
void (*smp_callin)(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user