mirror of https://gitee.com/openkylin/linux.git
Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (37 commits) um: Use generic irq Kconfig tile: Use generic irq Kconfig sparc: Use generic irq Kconfig score: Use generic irq Kconfig powerpc: Use generic irq Kconfig parisc: Use generic irq Kconfig mn10300: Use generic irq Kconfig microblaze: Use generic irq Kconfig m68knommu: Use generic irq Kconfig ia64: Use generic irq Kconfig frv: Use generic irq Kconfig blackfin: Use generic irq Kconfig alpha: Use generic irq Kconfig genirq: Remove __do_IRQ m32r: Convert to generic irq Kconfig m32r: Convert usrv platform irq handling m32r: Convert opsput_lcdpld irq chip m32r: Convert opsput lanpld irq chip m32r: Convert opsput pld irq chip m32r: Convert opsput irq chip ...
This commit is contained in:
commit
0f5c2ac58f
|
@ -357,14 +357,6 @@ Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com>
|
|||
|
||||
-----------------------------
|
||||
|
||||
What: __do_IRQ all in one fits nothing interrupt handler
|
||||
When: 2.6.32
|
||||
Why: __do_IRQ was kept for easy migration to the type flow handlers.
|
||||
More than two years of migration time is enough.
|
||||
Who: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
-----------------------------
|
||||
|
||||
What: fakephp and associated sysfs files in /sys/bus/pci/slots/
|
||||
When: 2011
|
||||
Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
||||
|
|
|
@ -8,6 +8,9 @@ config ALPHA
|
|||
select HAVE_IRQ_WORK
|
||||
select HAVE_PERF_EVENTS
|
||||
select HAVE_DMA_ATTRS
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_PROBE
|
||||
select AUTO_IRQ_AFFINITY if SMP
|
||||
help
|
||||
The Alpha is a 64-bit general-purpose processor designed and
|
||||
marketed by the Digital Equipment Corporation of blessed memory,
|
||||
|
@ -68,22 +71,6 @@ config GENERIC_IOMAP
|
|||
bool
|
||||
default n
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
config AUTO_IRQ_AFFINITY
|
||||
bool
|
||||
depends on SMP
|
||||
default y
|
||||
|
||||
source "init/Kconfig"
|
||||
source "kernel/Kconfig.freezer"
|
||||
|
||||
|
|
|
@ -30,6 +30,9 @@ config BLACKFIN
|
|||
select HAVE_KERNEL_LZO if RAMKERNEL
|
||||
select HAVE_OPROFILE
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_PROBE
|
||||
select IRQ_PER_CPU if SMP
|
||||
|
||||
config GENERIC_CSUM
|
||||
def_bool y
|
||||
|
@ -44,15 +47,6 @@ config ZONE_DMA
|
|||
config GENERIC_FIND_NEXT_BIT
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_GPIO
|
||||
def_bool y
|
||||
|
||||
|
@ -254,11 +248,6 @@ config HOTPLUG_CPU
|
|||
depends on SMP && HOTPLUG
|
||||
default y
|
||||
|
||||
config IRQ_PER_CPU
|
||||
bool
|
||||
depends on SMP
|
||||
default y
|
||||
|
||||
config HAVE_LEGACY_PER_CPU_AREA
|
||||
def_bool y
|
||||
depends on SMP
|
||||
|
|
|
@ -54,6 +54,8 @@ config CRIS
|
|||
bool
|
||||
default y
|
||||
select HAVE_IDE
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_HARDIRQS_NO_DEPRECATED
|
||||
|
||||
config HZ
|
||||
int
|
||||
|
@ -67,10 +69,6 @@ menu "General setup"
|
|||
|
||||
source "fs/Kconfig.binfmt"
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config ETRAX_CMDLINE
|
||||
string "Kernel command line"
|
||||
default "root=/dev/mtdblock3"
|
||||
|
|
|
@ -104,43 +104,21 @@ static void (*interrupt[NR_IRQS])(void) = {
|
|||
IRQ31_interrupt
|
||||
};
|
||||
|
||||
static void enable_crisv10_irq(unsigned int irq);
|
||||
|
||||
static unsigned int startup_crisv10_irq(unsigned int irq)
|
||||
static void enable_crisv10_irq(struct irq_data *data)
|
||||
{
|
||||
enable_crisv10_irq(irq);
|
||||
return 0;
|
||||
crisv10_unmask_irq(data->irq);
|
||||
}
|
||||
|
||||
#define shutdown_crisv10_irq disable_crisv10_irq
|
||||
|
||||
static void enable_crisv10_irq(unsigned int irq)
|
||||
{
|
||||
crisv10_unmask_irq(irq);
|
||||
}
|
||||
|
||||
static void disable_crisv10_irq(unsigned int irq)
|
||||
{
|
||||
crisv10_mask_irq(irq);
|
||||
}
|
||||
|
||||
static void ack_crisv10_irq(unsigned int irq)
|
||||
{
|
||||
}
|
||||
|
||||
static void end_crisv10_irq(unsigned int irq)
|
||||
static void disable_crisv10_irq(struct irq_data *data)
|
||||
{
|
||||
crisv10_mask_irq(data->irq);
|
||||
}
|
||||
|
||||
static struct irq_chip crisv10_irq_type = {
|
||||
.name = "CRISv10",
|
||||
.startup = startup_crisv10_irq,
|
||||
.shutdown = shutdown_crisv10_irq,
|
||||
.enable = enable_crisv10_irq,
|
||||
.disable = disable_crisv10_irq,
|
||||
.ack = ack_crisv10_irq,
|
||||
.end = end_crisv10_irq,
|
||||
.set_affinity = NULL
|
||||
.name = "CRISv10",
|
||||
.irq_shutdown = disable_crisv10_irq,
|
||||
.irq_enable = enable_crisv10_irq,
|
||||
.irq_disable = disable_crisv10_irq,
|
||||
};
|
||||
|
||||
void weird_irq(void);
|
||||
|
@ -221,7 +199,8 @@ init_IRQ(void)
|
|||
|
||||
/* Initialize IRQ handler descriptors. */
|
||||
for(i = 2; i < NR_IRQS; i++) {
|
||||
irq_desc[i].chip = &crisv10_irq_type;
|
||||
set_irq_desc_and_handler(i, &crisv10_irq_type,
|
||||
handle_simple_irq);
|
||||
set_int_vector(i, interrupt[i]);
|
||||
}
|
||||
|
||||
|
|
|
@ -291,54 +291,33 @@ void crisv32_unmask_irq(int irq)
|
|||
}
|
||||
|
||||
|
||||
static unsigned int startup_crisv32_irq(unsigned int irq)
|
||||
static void enable_crisv32_irq(struct irq_data *data)
|
||||
{
|
||||
crisv32_unmask_irq(irq);
|
||||
return 0;
|
||||
crisv32_unmask_irq(data->irq);
|
||||
}
|
||||
|
||||
static void shutdown_crisv32_irq(unsigned int irq)
|
||||
static void disable_crisv32_irq(struct irq_data *data)
|
||||
{
|
||||
crisv32_mask_irq(irq);
|
||||
crisv32_mask_irq(data->irq);
|
||||
}
|
||||
|
||||
static void enable_crisv32_irq(unsigned int irq)
|
||||
{
|
||||
crisv32_unmask_irq(irq);
|
||||
}
|
||||
|
||||
static void disable_crisv32_irq(unsigned int irq)
|
||||
{
|
||||
crisv32_mask_irq(irq);
|
||||
}
|
||||
|
||||
static void ack_crisv32_irq(unsigned int irq)
|
||||
{
|
||||
}
|
||||
|
||||
static void end_crisv32_irq(unsigned int irq)
|
||||
{
|
||||
}
|
||||
|
||||
int set_affinity_crisv32_irq(unsigned int irq, const struct cpumask *dest)
|
||||
static int set_affinity_crisv32_irq(struct irq_data *data,
|
||||
const struct cpumask *dest, bool force)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&irq_lock, flags);
|
||||
irq_allocations[irq - FIRST_IRQ].mask = *dest;
|
||||
spin_unlock_irqrestore(&irq_lock, flags);
|
||||
|
||||
spin_lock_irqsave(&irq_lock, flags);
|
||||
irq_allocations[data->irq - FIRST_IRQ].mask = *dest;
|
||||
spin_unlock_irqrestore(&irq_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip crisv32_irq_type = {
|
||||
.name = "CRISv32",
|
||||
.startup = startup_crisv32_irq,
|
||||
.shutdown = shutdown_crisv32_irq,
|
||||
.enable = enable_crisv32_irq,
|
||||
.disable = disable_crisv32_irq,
|
||||
.ack = ack_crisv32_irq,
|
||||
.end = end_crisv32_irq,
|
||||
.set_affinity = set_affinity_crisv32_irq
|
||||
.name = "CRISv32",
|
||||
.irq_shutdown = disable_crisv32_irq,
|
||||
.irq_enable = enable_crisv32_irq,
|
||||
.irq_disable = disable_crisv32_irq,
|
||||
.irq_set_affinity = set_affinity_crisv32_irq,
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -472,7 +451,8 @@ init_IRQ(void)
|
|||
|
||||
/* Point all IRQ's to bad handlers. */
|
||||
for (i = FIRST_IRQ, j = 0; j < NR_IRQS; i++, j++) {
|
||||
irq_desc[j].chip = &crisv32_irq_type;
|
||||
set_irq_chip_and_handler(j, &crisv32_irq_type,
|
||||
handle_simple_irq);
|
||||
set_exception_vector(i, interrupt[j]);
|
||||
}
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||
for_each_online_cpu(j)
|
||||
seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
|
||||
#endif
|
||||
seq_printf(p, " %14s", irq_desc[i].chip->name);
|
||||
seq_printf(p, " %14s", irq_desc[i].irq_data.chip->name);
|
||||
seq_printf(p, " %s", action->name);
|
||||
|
||||
for (action=action->next; action; action = action->next)
|
||||
|
@ -93,8 +93,8 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
|
|||
printk("do_IRQ: stack overflow: %lX\n", sp);
|
||||
show_stack(NULL, (unsigned long *)sp);
|
||||
}
|
||||
__do_IRQ(irq);
|
||||
irq_exit();
|
||||
generic_handle_irq(irq);
|
||||
irq_exit();
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ config FRV
|
|||
select HAVE_ARCH_TRACEHOOK
|
||||
select HAVE_IRQ_WORK
|
||||
select HAVE_PERF_EVENTS
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
|
||||
config ZONE_DMA
|
||||
bool
|
||||
|
@ -29,14 +30,6 @@ config GENERIC_CALIBRATE_DELAY
|
|||
bool
|
||||
default n
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
bool
|
||||
default y
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
|
|
@ -2,6 +2,8 @@ config H8300
|
|||
bool
|
||||
default y
|
||||
select HAVE_IDE
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_HARDIRQS_NO_DEPRECATED
|
||||
|
||||
config SYMBOL_PREFIX
|
||||
string
|
||||
|
@ -47,10 +49,6 @@ config GENERIC_HWEIGHT
|
|||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
|
|
@ -38,34 +38,30 @@ static inline int is_ext_irq(unsigned int irq)
|
|||
return (irq >= EXT_IRQ0 && irq <= (EXT_IRQ0 + EXT_IRQS));
|
||||
}
|
||||
|
||||
static void h8300_enable_irq(unsigned int irq)
|
||||
static void h8300_enable_irq(struct irq_data *data)
|
||||
{
|
||||
if (is_ext_irq(irq))
|
||||
IER_REGS |= 1 << (irq - EXT_IRQ0);
|
||||
if (is_ext_irq(data->irq))
|
||||
IER_REGS |= 1 << (data->irq - EXT_IRQ0);
|
||||
}
|
||||
|
||||
static void h8300_disable_irq(unsigned int irq)
|
||||
static void h8300_disable_irq(struct irq_data *data)
|
||||
{
|
||||
if (is_ext_irq(irq))
|
||||
IER_REGS &= ~(1 << (irq - EXT_IRQ0));
|
||||
if (is_ext_irq(data->irq))
|
||||
IER_REGS &= ~(1 << (data->irq - EXT_IRQ0));
|
||||
}
|
||||
|
||||
static void h8300_end_irq(unsigned int irq)
|
||||
static unsigned int h8300_startup_irq(struct irq_data *data)
|
||||
{
|
||||
}
|
||||
|
||||
static unsigned int h8300_startup_irq(unsigned int irq)
|
||||
{
|
||||
if (is_ext_irq(irq))
|
||||
return h8300_enable_irq_pin(irq);
|
||||
if (is_ext_irq(data->irq))
|
||||
return h8300_enable_irq_pin(data->irq);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void h8300_shutdown_irq(unsigned int irq)
|
||||
static void h8300_shutdown_irq(struct irq_data *data)
|
||||
{
|
||||
if (is_ext_irq(irq))
|
||||
h8300_disable_irq_pin(irq);
|
||||
if (is_ext_irq(data->irq))
|
||||
h8300_disable_irq_pin(data->irq);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -73,12 +69,10 @@ static void h8300_shutdown_irq(unsigned int irq)
|
|||
*/
|
||||
struct irq_chip h8300irq_chip = {
|
||||
.name = "H8300-INTC",
|
||||
.startup = h8300_startup_irq,
|
||||
.shutdown = h8300_shutdown_irq,
|
||||
.enable = h8300_enable_irq,
|
||||
.disable = h8300_disable_irq,
|
||||
.ack = NULL,
|
||||
.end = h8300_end_irq,
|
||||
.irq_startup = h8300_startup_irq,
|
||||
.irq_shutdown = h8300_shutdown_irq,
|
||||
.irq_enable = h8300_enable_irq,
|
||||
.irq_disable = h8300_disable_irq,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_RAMKERNEL)
|
||||
|
@ -160,18 +154,14 @@ void __init init_IRQ(void)
|
|||
|
||||
setup_vector();
|
||||
|
||||
for (c = 0; c < NR_IRQS; c++) {
|
||||
irq_desc[c].status = IRQ_DISABLED;
|
||||
irq_desc[c].action = NULL;
|
||||
irq_desc[c].depth = 1;
|
||||
irq_desc[c].chip = &h8300irq_chip;
|
||||
}
|
||||
for (c = 0; c < NR_IRQS; c++)
|
||||
set_irq_chip_and_handler(c, &h8300irq_chip, handle_simple_irq);
|
||||
}
|
||||
|
||||
asmlinkage void do_IRQ(int irq)
|
||||
{
|
||||
irq_enter();
|
||||
__do_IRQ(irq);
|
||||
generic_handle_irq(irq);
|
||||
irq_exit();
|
||||
}
|
||||
|
||||
|
@ -192,7 +182,7 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||
goto unlock;
|
||||
seq_printf(p, "%3d: ",i);
|
||||
seq_printf(p, "%10u ", kstat_irqs(i));
|
||||
seq_printf(p, " %14s", irq_desc[i].chip->name);
|
||||
seq_printf(p, " %14s", irq_desc[i].irq_data.chip->name);
|
||||
seq_printf(p, "-%-8s", irq_desc[i].name);
|
||||
seq_printf(p, " %s", action->name);
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@ config IA64
|
|||
select HAVE_KVM
|
||||
select HAVE_ARCH_TRACEHOOK
|
||||
select HAVE_DMA_API_DEBUG
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_PROBE
|
||||
select GENERIC_PENDING_IRQ if SMP
|
||||
select IRQ_PER_CPU
|
||||
default y
|
||||
help
|
||||
The Itanium Processor Family is Intel's 64-bit successor to
|
||||
|
@ -678,28 +682,6 @@ source "arch/ia64/kvm/Kconfig"
|
|||
|
||||
source "lib/Kconfig"
|
||||
|
||||
#
|
||||
# Use the generic interrupt handling code in kernel/irq/:
|
||||
#
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_PENDING_IRQ
|
||||
bool
|
||||
depends on GENERIC_HARDIRQS && SMP
|
||||
default y
|
||||
|
||||
config IRQ_PER_CPU
|
||||
bool
|
||||
default y
|
||||
|
||||
config IOMMU_HELPER
|
||||
def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB)
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@ config M32R
|
|||
select HAVE_KERNEL_GZIP
|
||||
select HAVE_KERNEL_BZIP2
|
||||
select HAVE_KERNEL_LZMA
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_HARDIRQS_NO_DEPRECATED
|
||||
select GENERIC_IRQ_PROBE
|
||||
|
||||
config SBUS
|
||||
bool
|
||||
|
@ -19,14 +22,6 @@ config ZONE_DMA
|
|||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
config NO_IOPORT
|
||||
def_bool y
|
||||
|
||||
|
|
|
@ -40,8 +40,10 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||
}
|
||||
|
||||
if (i < NR_IRQS) {
|
||||
raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
|
||||
action = irq_desc[i].action;
|
||||
struct irq_desc *desc = irq_to_desc(i);
|
||||
|
||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||
action = desc->action;
|
||||
if (!action)
|
||||
goto skip;
|
||||
seq_printf(p, "%3d: ",i);
|
||||
|
@ -51,7 +53,7 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||
for_each_online_cpu(j)
|
||||
seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
|
||||
#endif
|
||||
seq_printf(p, " %14s", irq_desc[i].chip->name);
|
||||
seq_printf(p, " %14s", desc->irq_data.chip->name);
|
||||
seq_printf(p, " %s", action->name);
|
||||
|
||||
for (action=action->next; action; action = action->next)
|
||||
|
@ -59,7 +61,7 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||
|
||||
seq_putc(p, '\n');
|
||||
skip:
|
||||
raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
|
||||
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -39,39 +39,30 @@ static void enable_m32104ut_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_m32104ut(unsigned int irq)
|
||||
static void mask_m32104ut_irq(struct irq_data *data)
|
||||
{
|
||||
disable_m32104ut_irq(irq);
|
||||
disable_m32104ut_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_m32104ut_irq(unsigned int irq)
|
||||
static void unmask_m32104ut_irq(struct irq_data *data)
|
||||
{
|
||||
enable_m32104ut_irq(irq);
|
||||
enable_m32104ut_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_m32104ut_irq(unsigned int irq)
|
||||
static void shutdown_m32104ut_irq(struct irq_data *data)
|
||||
{
|
||||
enable_m32104ut_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
unsigned int irq = data->irq;
|
||||
unsigned long port = irq2port(irq);
|
||||
|
||||
static void shutdown_m32104ut_irq(unsigned int irq)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip m32104ut_irq_type =
|
||||
{
|
||||
.name = "M32104UT-IRQ",
|
||||
.startup = startup_m32104ut_irq,
|
||||
.shutdown = shutdown_m32104ut_irq,
|
||||
.enable = enable_m32104ut_irq,
|
||||
.disable = disable_m32104ut_irq,
|
||||
.ack = mask_and_ack_m32104ut,
|
||||
.end = end_m32104ut_irq
|
||||
.name = "M32104UT-IRQ",
|
||||
.irq_shutdown = shutdown_m32104ut_irq,
|
||||
.irq_unmask = unmask_m32104ut_irq,
|
||||
.irq_mask = mask_m32104ut_irq,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
|
@ -85,36 +76,29 @@ void __init init_IRQ(void)
|
|||
|
||||
#if defined(CONFIG_SMC91X)
|
||||
/* INT#0: LAN controller on M32104UT-LAN (SMC91C111)*/
|
||||
irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT0].chip = &m32104ut_irq_type;
|
||||
irq_desc[M32R_IRQ_INT0].action = 0;
|
||||
irq_desc[M32R_IRQ_INT0].depth = 1;
|
||||
icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD11; /* "H" level sense */
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT0, &m32104ut_irq_type,
|
||||
handle_level_irq);
|
||||
/* "H" level sense */
|
||||
cu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD11;
|
||||
disable_m32104ut_irq(M32R_IRQ_INT0);
|
||||
#endif /* CONFIG_SMC91X */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &m32104ut_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &m32104ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_m32104ut_irq(M32R_IRQ_MFT2);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_SIO
|
||||
/* SIO0_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &m32104ut_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &m32104ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = M32R_ICUCR_IEN;
|
||||
disable_m32104ut_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &m32104ut_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &m32104ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = M32R_ICUCR_IEN;
|
||||
disable_m32104ut_irq(M32R_IRQ_SIO0_S);
|
||||
#endif /* CONFIG_SERIAL_M32R_SIO */
|
||||
|
|
|
@ -45,39 +45,30 @@ static void enable_m32700ut_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_m32700ut(unsigned int irq)
|
||||
static void mask_m32700ut(struct irq_data *data)
|
||||
{
|
||||
disable_m32700ut_irq(irq);
|
||||
disable_m32700ut_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_m32700ut_irq(unsigned int irq)
|
||||
static void unmask_m32700ut(struct irq_data *data)
|
||||
{
|
||||
enable_m32700ut_irq(irq);
|
||||
enable_m32700ut_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_m32700ut_irq(unsigned int irq)
|
||||
{
|
||||
enable_m32700ut_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_m32700ut_irq(unsigned int irq)
|
||||
static void shutdown_m32700ut(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip m32700ut_irq_type =
|
||||
{
|
||||
.name = "M32700UT-IRQ",
|
||||
.startup = startup_m32700ut_irq,
|
||||
.shutdown = shutdown_m32700ut_irq,
|
||||
.enable = enable_m32700ut_irq,
|
||||
.disable = disable_m32700ut_irq,
|
||||
.ack = mask_and_ack_m32700ut,
|
||||
.end = end_m32700ut_irq
|
||||
.name = "M32700UT-IRQ",
|
||||
.irq_shutdown = shutdown_m32700ut,
|
||||
.irq_mask = mask_m32700ut,
|
||||
.irq_unmask = unmask_m32700ut
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -99,7 +90,6 @@ static void disable_m32700ut_pld_irq(unsigned int irq)
|
|||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
// disable_m32700ut_irq(M32R_IRQ_INT1);
|
||||
port = pldirq2port(pldirq);
|
||||
data = pld_icu_data[pldirq].icucr|PLD_ICUCR_ILEVEL7;
|
||||
outw(data, port);
|
||||
|
@ -111,50 +101,38 @@ static void enable_m32700ut_pld_irq(unsigned int irq)
|
|||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
// enable_m32700ut_irq(M32R_IRQ_INT1);
|
||||
port = pldirq2port(pldirq);
|
||||
data = pld_icu_data[pldirq].icucr|PLD_ICUCR_IEN|PLD_ICUCR_ILEVEL6;
|
||||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_m32700ut_pld(unsigned int irq)
|
||||
static void mask_m32700ut_pld(struct irq_data *data)
|
||||
{
|
||||
disable_m32700ut_pld_irq(irq);
|
||||
// mask_and_ack_m32700ut(M32R_IRQ_INT1);
|
||||
disable_m32700ut_pld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_m32700ut_pld_irq(unsigned int irq)
|
||||
static void unmask_m32700ut_pld(struct irq_data *data)
|
||||
{
|
||||
enable_m32700ut_pld_irq(irq);
|
||||
end_m32700ut_irq(M32R_IRQ_INT1);
|
||||
enable_m32700ut_pld_irq(data->irq);
|
||||
enable_m32700ut_irq(M32R_IRQ_INT1);
|
||||
}
|
||||
|
||||
static unsigned int startup_m32700ut_pld_irq(unsigned int irq)
|
||||
{
|
||||
enable_m32700ut_pld_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_m32700ut_pld_irq(unsigned int irq)
|
||||
static void shutdown_m32700ut_pld_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
// shutdown_m32700ut_irq(M32R_IRQ_INT1);
|
||||
pldirq = irq2pldirq(data->irq);
|
||||
port = pldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip m32700ut_pld_irq_type =
|
||||
{
|
||||
.name = "M32700UT-PLD-IRQ",
|
||||
.startup = startup_m32700ut_pld_irq,
|
||||
.shutdown = shutdown_m32700ut_pld_irq,
|
||||
.enable = enable_m32700ut_pld_irq,
|
||||
.disable = disable_m32700ut_pld_irq,
|
||||
.ack = mask_and_ack_m32700ut_pld,
|
||||
.end = end_m32700ut_pld_irq
|
||||
.name = "M32700UT-PLD-IRQ",
|
||||
.irq_shutdown = shutdown_m32700ut_pld_irq,
|
||||
.irq_mask = mask_m32700ut_pld,
|
||||
.irq_unmask = unmask_m32700ut_pld,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -188,42 +166,33 @@ static void enable_m32700ut_lanpld_irq(unsigned int irq)
|
|||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_m32700ut_lanpld(unsigned int irq)
|
||||
static void mask_m32700ut_lanpld(struct irq_data *data)
|
||||
{
|
||||
disable_m32700ut_lanpld_irq(irq);
|
||||
disable_m32700ut_lanpld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_m32700ut_lanpld_irq(unsigned int irq)
|
||||
static void unmask_m32700ut_lanpld(struct irq_data *data)
|
||||
{
|
||||
enable_m32700ut_lanpld_irq(irq);
|
||||
end_m32700ut_irq(M32R_IRQ_INT0);
|
||||
enable_m32700ut_lanpld_irq(data->irq);
|
||||
enable_m32700ut_irq(M32R_IRQ_INT0);
|
||||
}
|
||||
|
||||
static unsigned int startup_m32700ut_lanpld_irq(unsigned int irq)
|
||||
{
|
||||
enable_m32700ut_lanpld_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_m32700ut_lanpld_irq(unsigned int irq)
|
||||
static void shutdown_m32700ut_lanpld(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2lanpldirq(irq);
|
||||
pldirq = irq2lanpldirq(data->irq);
|
||||
port = lanpldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip m32700ut_lanpld_irq_type =
|
||||
{
|
||||
.name = "M32700UT-PLD-LAN-IRQ",
|
||||
.startup = startup_m32700ut_lanpld_irq,
|
||||
.shutdown = shutdown_m32700ut_lanpld_irq,
|
||||
.enable = enable_m32700ut_lanpld_irq,
|
||||
.disable = disable_m32700ut_lanpld_irq,
|
||||
.ack = mask_and_ack_m32700ut_lanpld,
|
||||
.end = end_m32700ut_lanpld_irq
|
||||
.name = "M32700UT-PLD-LAN-IRQ",
|
||||
.irq_shutdown = shutdown_m32700ut_lanpld,
|
||||
.irq_mask = mask_m32700ut_lanpld,
|
||||
.irq_unmask = unmask_m32700ut_lanpld,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -257,143 +226,110 @@ static void enable_m32700ut_lcdpld_irq(unsigned int irq)
|
|||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_m32700ut_lcdpld(unsigned int irq)
|
||||
static void mask_m32700ut_lcdpld(struct irq_data *data)
|
||||
{
|
||||
disable_m32700ut_lcdpld_irq(irq);
|
||||
disable_m32700ut_lcdpld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_m32700ut_lcdpld_irq(unsigned int irq)
|
||||
static void unmask_m32700ut_lcdpld(struct irq_data *data)
|
||||
{
|
||||
enable_m32700ut_lcdpld_irq(irq);
|
||||
end_m32700ut_irq(M32R_IRQ_INT2);
|
||||
enable_m32700ut_lcdpld_irq(data->irq);
|
||||
enable_m32700ut_irq(M32R_IRQ_INT2);
|
||||
}
|
||||
|
||||
static unsigned int startup_m32700ut_lcdpld_irq(unsigned int irq)
|
||||
{
|
||||
enable_m32700ut_lcdpld_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_m32700ut_lcdpld_irq(unsigned int irq)
|
||||
static void shutdown_m32700ut_lcdpld(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2lcdpldirq(irq);
|
||||
pldirq = irq2lcdpldirq(data->irq);
|
||||
port = lcdpldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip m32700ut_lcdpld_irq_type =
|
||||
{
|
||||
.name = "M32700UT-PLD-LCD-IRQ",
|
||||
.startup = startup_m32700ut_lcdpld_irq,
|
||||
.shutdown = shutdown_m32700ut_lcdpld_irq,
|
||||
.enable = enable_m32700ut_lcdpld_irq,
|
||||
.disable = disable_m32700ut_lcdpld_irq,
|
||||
.ack = mask_and_ack_m32700ut_lcdpld,
|
||||
.end = end_m32700ut_lcdpld_irq
|
||||
.name = "M32700UT-PLD-LCD-IRQ",
|
||||
.irq_shutdown = shutdown_m32700ut_lcdpld,
|
||||
.irq_mask = mask_m32700ut_lcdpld,
|
||||
.irq_unmask = unmask_m32700ut_lcdpld,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
#if defined(CONFIG_SMC91X)
|
||||
/* INT#0: LAN controller on M32700UT-LAN (SMC91C111)*/
|
||||
irq_desc[M32700UT_LAN_IRQ_LAN].status = IRQ_DISABLED;
|
||||
irq_desc[M32700UT_LAN_IRQ_LAN].chip = &m32700ut_lanpld_irq_type;
|
||||
irq_desc[M32700UT_LAN_IRQ_LAN].action = 0;
|
||||
irq_desc[M32700UT_LAN_IRQ_LAN].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(M32700UT_LAN_IRQ_LAN,
|
||||
&m32700ut_lanpld_irq_type, handle_level_irq);
|
||||
lanpld_icu_data[irq2lanpldirq(M32700UT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */
|
||||
disable_m32700ut_lanpld_irq(M32700UT_LAN_IRQ_LAN);
|
||||
#endif /* CONFIG_SMC91X */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_m32700ut_irq(M32R_IRQ_MFT2);
|
||||
|
||||
/* SIO0 : receive */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_m32700ut_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0 : send */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_m32700ut_irq(M32R_IRQ_SIO0_S);
|
||||
|
||||
/* SIO1 : receive */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_m32700ut_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1 : send */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_m32700ut_irq(M32R_IRQ_SIO1_S);
|
||||
|
||||
/* DMA1 : */
|
||||
irq_desc[M32R_IRQ_DMA1].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_DMA1].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_DMA1].action = 0;
|
||||
irq_desc[M32R_IRQ_DMA1].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_DMA1, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_DMA1].icucr = 0;
|
||||
disable_m32700ut_irq(M32R_IRQ_DMA1);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_PLDSIO
|
||||
/* INT#1: SIO0 Receive on PLD */
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].action = 0;
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_SIO0_RCV, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03;
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_SIO0_RCV);
|
||||
|
||||
/* INT#1: SIO0 Send on PLD */
|
||||
irq_desc[PLD_IRQ_SIO0_SND].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_SIO0_SND].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_SIO0_SND].action = 0;
|
||||
irq_desc[PLD_IRQ_SIO0_SND].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_SIO0_SND, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03;
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_SIO0_SND);
|
||||
#endif /* CONFIG_SERIAL_M32R_PLDSIO */
|
||||
|
||||
/* INT#1: CFC IREQ on PLD */
|
||||
irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFIREQ].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CFIREQ].action = 0;
|
||||
irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_CFIREQ);
|
||||
|
||||
/* INT#1: CFC Insert on PLD */
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_CFC_INSERT);
|
||||
|
||||
/* INT#1: CFC Eject on PLD */
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_CFC_EJECT);
|
||||
|
||||
|
@ -413,13 +349,11 @@ void __init init_IRQ(void)
|
|||
|
||||
#if defined(CONFIG_USB)
|
||||
outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */
|
||||
set_irq_chip_and_handler(M32700UT_LCD_IRQ_USB_INT1,
|
||||
&m32700ut_lcdpld_irq_type, handle_level_irq);
|
||||
|
||||
irq_desc[M32700UT_LCD_IRQ_USB_INT1].status = IRQ_DISABLED;
|
||||
irq_desc[M32700UT_LCD_IRQ_USB_INT1].chip = &m32700ut_lcdpld_irq_type;
|
||||
irq_desc[M32700UT_LCD_IRQ_USB_INT1].action = 0;
|
||||
irq_desc[M32700UT_LCD_IRQ_USB_INT1].depth = 1;
|
||||
lcdpld_icu_data[irq2lcdpldirq(M32700UT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */
|
||||
disable_m32700ut_lcdpld_irq(M32700UT_LCD_IRQ_USB_INT1);
|
||||
lcdpld_icu_data[irq2lcdpldirq(M32700UT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */
|
||||
disable_m32700ut_lcdpld_irq(M32700UT_LCD_IRQ_USB_INT1);
|
||||
#endif
|
||||
/*
|
||||
* INT2# is used for BAT, USB, AUDIO
|
||||
|
@ -432,10 +366,8 @@ void __init init_IRQ(void)
|
|||
/*
|
||||
* INT3# is used for AR
|
||||
*/
|
||||
irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT3].chip = &m32700ut_irq_type;
|
||||
irq_desc[M32R_IRQ_INT3].action = 0;
|
||||
irq_desc[M32R_IRQ_INT3].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT3, &m32700ut_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_m32700ut_irq(M32R_IRQ_INT3);
|
||||
#endif /* CONFIG_VIDEO_M32R_AR */
|
||||
|
|
|
@ -38,40 +38,30 @@ static void enable_mappi_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_mappi(unsigned int irq)
|
||||
static void mask_mappi(struct irq_data *data)
|
||||
{
|
||||
disable_mappi_irq(irq);
|
||||
disable_mappi_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_mappi_irq(unsigned int irq)
|
||||
static void unmask_mappi(struct irq_data *data)
|
||||
{
|
||||
if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
|
||||
enable_mappi_irq(irq);
|
||||
enable_mappi_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_mappi_irq(unsigned int irq)
|
||||
{
|
||||
enable_mappi_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_mappi_irq(unsigned int irq)
|
||||
static void shutdown_mappi(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip mappi_irq_type =
|
||||
{
|
||||
.name = "MAPPI-IRQ",
|
||||
.startup = startup_mappi_irq,
|
||||
.shutdown = shutdown_mappi_irq,
|
||||
.enable = enable_mappi_irq,
|
||||
.disable = disable_mappi_irq,
|
||||
.ack = mask_and_ack_mappi,
|
||||
.end = end_mappi_irq
|
||||
.name = "MAPPI-IRQ",
|
||||
.irq_shutdown = shutdown_mappi,
|
||||
.irq_mask = mask_mappi,
|
||||
.irq_unmask = unmask_mappi,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
|
@ -85,70 +75,54 @@ void __init init_IRQ(void)
|
|||
|
||||
#ifdef CONFIG_NE2000
|
||||
/* INT0 : LAN controller (RTL8019AS) */
|
||||
irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT0].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_INT0].action = NULL;
|
||||
irq_desc[M32R_IRQ_INT0].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD11;
|
||||
disable_mappi_irq(M32R_IRQ_INT0);
|
||||
#endif /* CONFIG_M32R_NE2000 */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = NULL;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_mappi_irq(M32R_IRQ_MFT2);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_SIO
|
||||
/* SIO0_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = NULL;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = NULL;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO0_S);
|
||||
|
||||
/* SIO1_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = NULL;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = NULL;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO1_S);
|
||||
#endif /* CONFIG_SERIAL_M32R_SIO */
|
||||
|
||||
#if defined(CONFIG_M32R_PCC)
|
||||
/* INT1 : pccard0 interrupt */
|
||||
irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT1].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_INT1].action = NULL;
|
||||
irq_desc[M32R_IRQ_INT1].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00;
|
||||
disable_mappi_irq(M32R_IRQ_INT1);
|
||||
|
||||
/* INT2 : pccard1 interrupt */
|
||||
irq_desc[M32R_IRQ_INT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT2].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_INT2].action = NULL;
|
||||
irq_desc[M32R_IRQ_INT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT2, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00;
|
||||
disable_mappi_irq(M32R_IRQ_INT2);
|
||||
#endif /* CONFIG_M32RPCC */
|
||||
|
|
|
@ -46,126 +46,97 @@ static void enable_mappi2_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_mappi2(unsigned int irq)
|
||||
static void mask_mappi2(struct irq_data *data)
|
||||
{
|
||||
disable_mappi2_irq(irq);
|
||||
disable_mappi2_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_mappi2_irq(unsigned int irq)
|
||||
static void unmask_mappi2(struct irq_data *data)
|
||||
{
|
||||
enable_mappi2_irq(irq);
|
||||
enable_mappi2_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_mappi2_irq(unsigned int irq)
|
||||
{
|
||||
enable_mappi2_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_mappi2_irq(unsigned int irq)
|
||||
static void shutdown_mappi2(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip mappi2_irq_type =
|
||||
{
|
||||
.name = "MAPPI2-IRQ",
|
||||
.startup = startup_mappi2_irq,
|
||||
.shutdown = shutdown_mappi2_irq,
|
||||
.enable = enable_mappi2_irq,
|
||||
.disable = disable_mappi2_irq,
|
||||
.ack = mask_and_ack_mappi2,
|
||||
.end = end_mappi2_irq
|
||||
.name = "MAPPI2-IRQ",
|
||||
.irq_shutdown = shutdown_mappi2,
|
||||
.irq_mask = mask_mappi2,
|
||||
.irq_unmask = unmask_mappi2,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
#if defined(CONFIG_SMC91X)
|
||||
/* INT0 : LAN controller (SMC91111) */
|
||||
irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT0].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_INT0].action = 0;
|
||||
irq_desc[M32R_IRQ_INT0].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_mappi2_irq(M32R_IRQ_INT0);
|
||||
#endif /* CONFIG_SMC91X */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_mappi2_irq(M32R_IRQ_MFT2);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_SIO
|
||||
/* SIO0_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_mappi2_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_mappi2_irq(M32R_IRQ_SIO0_S);
|
||||
/* SIO1_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_mappi2_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_mappi2_irq(M32R_IRQ_SIO1_S);
|
||||
#endif /* CONFIG_M32R_USE_DBG_CONSOLE */
|
||||
|
||||
#if defined(CONFIG_USB)
|
||||
/* INT1 : USB Host controller interrupt */
|
||||
irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT1].chip = &mappi2_irq_type;
|
||||
irq_desc[M32R_IRQ_INT1].action = 0;
|
||||
irq_desc[M32R_IRQ_INT1].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01;
|
||||
disable_mappi2_irq(M32R_IRQ_INT1);
|
||||
#endif /* CONFIG_USB */
|
||||
|
||||
/* ICUCR40: CFC IREQ */
|
||||
irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFIREQ].chip = &mappi2_irq_type;
|
||||
irq_desc[PLD_IRQ_CFIREQ].action = 0;
|
||||
irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01;
|
||||
disable_mappi2_irq(PLD_IRQ_CFIREQ);
|
||||
|
||||
#if defined(CONFIG_M32R_CFC)
|
||||
/* ICUCR41: CFC Insert */
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].chip = &mappi2_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00;
|
||||
disable_mappi2_irq(PLD_IRQ_CFC_INSERT);
|
||||
|
||||
/* ICUCR42: CFC Eject */
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].chip = &mappi2_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &mappi2_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[PLD_IRQ_CFC_EJECT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_mappi2_irq(PLD_IRQ_CFC_EJECT);
|
||||
#endif /* CONFIG_MAPPI2_CFC */
|
||||
|
|
|
@ -46,128 +46,98 @@ static void enable_mappi3_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_mappi3(unsigned int irq)
|
||||
static void mask_mappi3(struct irq_data *data)
|
||||
{
|
||||
disable_mappi3_irq(irq);
|
||||
disable_mappi3_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_mappi3_irq(unsigned int irq)
|
||||
static void unmask_mappi3(struct irq_data *data)
|
||||
{
|
||||
enable_mappi3_irq(irq);
|
||||
enable_mappi3_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_mappi3_irq(unsigned int irq)
|
||||
{
|
||||
enable_mappi3_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_mappi3_irq(unsigned int irq)
|
||||
static void shutdown_mappi3(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip mappi3_irq_type =
|
||||
{
|
||||
.name = "MAPPI3-IRQ",
|
||||
.startup = startup_mappi3_irq,
|
||||
.shutdown = shutdown_mappi3_irq,
|
||||
.enable = enable_mappi3_irq,
|
||||
.disable = disable_mappi3_irq,
|
||||
.ack = mask_and_ack_mappi3,
|
||||
.end = end_mappi3_irq
|
||||
static struct irq_chip mappi3_irq_type = {
|
||||
.name = "MAPPI3-IRQ",
|
||||
.irq_shutdown = shutdown_mappi3,
|
||||
.irq_mask = mask_mappi3,
|
||||
.irq_unmask = unmask_mappi3,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
#if defined(CONFIG_SMC91X)
|
||||
/* INT0 : LAN controller (SMC91111) */
|
||||
irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT0].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_INT0].action = 0;
|
||||
irq_desc[M32R_IRQ_INT0].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_mappi3_irq(M32R_IRQ_INT0);
|
||||
#endif /* CONFIG_SMC91X */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_mappi3_irq(M32R_IRQ_MFT2);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_SIO
|
||||
/* SIO0_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_mappi3_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_mappi3_irq(M32R_IRQ_SIO0_S);
|
||||
/* SIO1_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_mappi3_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_mappi3_irq(M32R_IRQ_SIO1_S);
|
||||
#endif /* CONFIG_M32R_USE_DBG_CONSOLE */
|
||||
|
||||
#if defined(CONFIG_USB)
|
||||
/* INT1 : USB Host controller interrupt */
|
||||
irq_desc[M32R_IRQ_INT1].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT1].chip = &mappi3_irq_type;
|
||||
irq_desc[M32R_IRQ_INT1].action = 0;
|
||||
irq_desc[M32R_IRQ_INT1].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01;
|
||||
disable_mappi3_irq(M32R_IRQ_INT1);
|
||||
#endif /* CONFIG_USB */
|
||||
|
||||
/* CFC IREQ */
|
||||
irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFIREQ].chip = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_CFIREQ].action = 0;
|
||||
irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01;
|
||||
disable_mappi3_irq(PLD_IRQ_CFIREQ);
|
||||
|
||||
#if defined(CONFIG_M32R_CFC)
|
||||
/* ICUCR41: CFC Insert & eject */
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].chip = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00;
|
||||
disable_mappi3_irq(PLD_IRQ_CFC_INSERT);
|
||||
|
||||
#endif /* CONFIG_M32R_CFC */
|
||||
|
||||
/* IDE IREQ */
|
||||
irq_desc[PLD_IRQ_IDEIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_IDEIREQ].chip = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_IDEIREQ].action = 0;
|
||||
irq_desc[PLD_IRQ_IDEIREQ].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_IDEIREQ, &mappi3_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[PLD_IRQ_IDEIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_mappi3_irq(PLD_IRQ_IDEIREQ);
|
||||
|
||||
|
|
|
@ -37,39 +37,30 @@ static void enable_oaks32r_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_mappi(unsigned int irq)
|
||||
static void mask_oaks32r(struct irq_data *data)
|
||||
{
|
||||
disable_oaks32r_irq(irq);
|
||||
disable_oaks32r_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_oaks32r_irq(unsigned int irq)
|
||||
static void unmask_oaks32r(struct irq_data *data)
|
||||
{
|
||||
enable_oaks32r_irq(irq);
|
||||
enable_oaks32r_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_oaks32r_irq(unsigned int irq)
|
||||
{
|
||||
enable_oaks32r_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_oaks32r_irq(unsigned int irq)
|
||||
static void shutdown_oaks32r(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip oaks32r_irq_type =
|
||||
{
|
||||
.name = "OAKS32R-IRQ",
|
||||
.startup = startup_oaks32r_irq,
|
||||
.shutdown = shutdown_oaks32r_irq,
|
||||
.enable = enable_oaks32r_irq,
|
||||
.disable = disable_oaks32r_irq,
|
||||
.ack = mask_and_ack_mappi,
|
||||
.end = end_oaks32r_irq
|
||||
.name = "OAKS32R-IRQ",
|
||||
.irq_shutdown = shutdown_oaks32r,
|
||||
.irq_mask = mask_oaks32r,
|
||||
.irq_unmask = unmask_oaks32r,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
|
@ -83,52 +74,40 @@ void __init init_IRQ(void)
|
|||
|
||||
#ifdef CONFIG_NE2000
|
||||
/* INT3 : LAN controller (RTL8019AS) */
|
||||
irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT3].chip = &oaks32r_irq_type;
|
||||
irq_desc[M32R_IRQ_INT3].action = 0;
|
||||
irq_desc[M32R_IRQ_INT3].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT3, &oaks32r_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_oaks32r_irq(M32R_IRQ_INT3);
|
||||
#endif /* CONFIG_M32R_NE2000 */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &oaks32r_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &oaks32r_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_oaks32r_irq(M32R_IRQ_MFT2);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_SIO
|
||||
/* SIO0_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &oaks32r_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &oaks32r_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_oaks32r_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &oaks32r_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &oaks32r_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_oaks32r_irq(M32R_IRQ_SIO0_S);
|
||||
|
||||
/* SIO1_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &oaks32r_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &oaks32r_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_oaks32r_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &oaks32r_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &oaks32r_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_oaks32r_irq(M32R_IRQ_SIO1_S);
|
||||
#endif /* CONFIG_SERIAL_M32R_SIO */
|
||||
|
|
|
@ -46,39 +46,30 @@ static void enable_opsput_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_opsput(unsigned int irq)
|
||||
static void mask_opsput(struct irq_data *data)
|
||||
{
|
||||
disable_opsput_irq(irq);
|
||||
disable_opsput_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_opsput_irq(unsigned int irq)
|
||||
static void unmask_opsput(struct irq_data *data)
|
||||
{
|
||||
enable_opsput_irq(irq);
|
||||
enable_opsput_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_opsput_irq(unsigned int irq)
|
||||
{
|
||||
enable_opsput_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_opsput_irq(unsigned int irq)
|
||||
static void shutdown_opsput(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip opsput_irq_type =
|
||||
{
|
||||
.name = "OPSPUT-IRQ",
|
||||
.startup = startup_opsput_irq,
|
||||
.shutdown = shutdown_opsput_irq,
|
||||
.enable = enable_opsput_irq,
|
||||
.disable = disable_opsput_irq,
|
||||
.ack = mask_and_ack_opsput,
|
||||
.end = end_opsput_irq
|
||||
.name = "OPSPUT-IRQ",
|
||||
.irq_shutdown = shutdown_opsput,
|
||||
.irq_mask = mask_opsput,
|
||||
.irq_unmask = unmask_opsput,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -100,7 +91,6 @@ static void disable_opsput_pld_irq(unsigned int irq)
|
|||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
// disable_opsput_irq(M32R_IRQ_INT1);
|
||||
port = pldirq2port(pldirq);
|
||||
data = pld_icu_data[pldirq].icucr|PLD_ICUCR_ILEVEL7;
|
||||
outw(data, port);
|
||||
|
@ -112,50 +102,38 @@ static void enable_opsput_pld_irq(unsigned int irq)
|
|||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
// enable_opsput_irq(M32R_IRQ_INT1);
|
||||
port = pldirq2port(pldirq);
|
||||
data = pld_icu_data[pldirq].icucr|PLD_ICUCR_IEN|PLD_ICUCR_ILEVEL6;
|
||||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_opsput_pld(unsigned int irq)
|
||||
static void mask_opsput_pld(struct irq_data *data)
|
||||
{
|
||||
disable_opsput_pld_irq(irq);
|
||||
// mask_and_ack_opsput(M32R_IRQ_INT1);
|
||||
disable_opsput_pld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_opsput_pld_irq(unsigned int irq)
|
||||
static void unmask_opsput_pld(struct irq_data *data)
|
||||
{
|
||||
enable_opsput_pld_irq(irq);
|
||||
end_opsput_irq(M32R_IRQ_INT1);
|
||||
enable_opsput_pld_irq(data->irq);
|
||||
enable_opsput_irq(M32R_IRQ_INT1);
|
||||
}
|
||||
|
||||
static unsigned int startup_opsput_pld_irq(unsigned int irq)
|
||||
{
|
||||
enable_opsput_pld_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_opsput_pld_irq(unsigned int irq)
|
||||
static void shutdown_opsput_pld(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
// shutdown_opsput_irq(M32R_IRQ_INT1);
|
||||
pldirq = irq2pldirq(data->irq);
|
||||
port = pldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip opsput_pld_irq_type =
|
||||
{
|
||||
.name = "OPSPUT-PLD-IRQ",
|
||||
.startup = startup_opsput_pld_irq,
|
||||
.shutdown = shutdown_opsput_pld_irq,
|
||||
.enable = enable_opsput_pld_irq,
|
||||
.disable = disable_opsput_pld_irq,
|
||||
.ack = mask_and_ack_opsput_pld,
|
||||
.end = end_opsput_pld_irq
|
||||
.name = "OPSPUT-PLD-IRQ",
|
||||
.irq_shutdown = shutdown_opsput_pld,
|
||||
.irq_mask = mask_opsput_pld,
|
||||
.irq_unmask = unmask_opsput_pld,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -189,42 +167,33 @@ static void enable_opsput_lanpld_irq(unsigned int irq)
|
|||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_opsput_lanpld(unsigned int irq)
|
||||
static void mask_opsput_lanpld(struct irq_data *data)
|
||||
{
|
||||
disable_opsput_lanpld_irq(irq);
|
||||
disable_opsput_lanpld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_opsput_lanpld_irq(unsigned int irq)
|
||||
static void unmask_opsput_lanpld(struct irq_data *data)
|
||||
{
|
||||
enable_opsput_lanpld_irq(irq);
|
||||
end_opsput_irq(M32R_IRQ_INT0);
|
||||
enable_opsput_lanpld_irq(data->irq);
|
||||
enable_opsput_irq(M32R_IRQ_INT0);
|
||||
}
|
||||
|
||||
static unsigned int startup_opsput_lanpld_irq(unsigned int irq)
|
||||
{
|
||||
enable_opsput_lanpld_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_opsput_lanpld_irq(unsigned int irq)
|
||||
static void shutdown_opsput_lanpld(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2lanpldirq(irq);
|
||||
pldirq = irq2lanpldirq(data->irq);
|
||||
port = lanpldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip opsput_lanpld_irq_type =
|
||||
{
|
||||
.name = "OPSPUT-PLD-LAN-IRQ",
|
||||
.startup = startup_opsput_lanpld_irq,
|
||||
.shutdown = shutdown_opsput_lanpld_irq,
|
||||
.enable = enable_opsput_lanpld_irq,
|
||||
.disable = disable_opsput_lanpld_irq,
|
||||
.ack = mask_and_ack_opsput_lanpld,
|
||||
.end = end_opsput_lanpld_irq
|
||||
.name = "OPSPUT-PLD-LAN-IRQ",
|
||||
.irq_shutdown = shutdown_opsput_lanpld,
|
||||
.irq_mask = mask_opsput_lanpld,
|
||||
.irq_unmask = unmask_opsput_lanpld,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -258,143 +227,109 @@ static void enable_opsput_lcdpld_irq(unsigned int irq)
|
|||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_opsput_lcdpld(unsigned int irq)
|
||||
static void mask_opsput_lcdpld(struct irq_data *data)
|
||||
{
|
||||
disable_opsput_lcdpld_irq(irq);
|
||||
disable_opsput_lcdpld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_opsput_lcdpld_irq(unsigned int irq)
|
||||
static void unmask_opsput_lcdpld(struct irq_data *data)
|
||||
{
|
||||
enable_opsput_lcdpld_irq(irq);
|
||||
end_opsput_irq(M32R_IRQ_INT2);
|
||||
enable_opsput_lcdpld_irq(data->irq);
|
||||
enable_opsput_irq(M32R_IRQ_INT2);
|
||||
}
|
||||
|
||||
static unsigned int startup_opsput_lcdpld_irq(unsigned int irq)
|
||||
{
|
||||
enable_opsput_lcdpld_irq(irq);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void shutdown_opsput_lcdpld_irq(unsigned int irq)
|
||||
static void shutdown_opsput_lcdpld(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2lcdpldirq(irq);
|
||||
pldirq = irq2lcdpldirq(data->irq);
|
||||
port = lcdpldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip opsput_lcdpld_irq_type =
|
||||
{
|
||||
"OPSPUT-PLD-LCD-IRQ",
|
||||
startup_opsput_lcdpld_irq,
|
||||
shutdown_opsput_lcdpld_irq,
|
||||
enable_opsput_lcdpld_irq,
|
||||
disable_opsput_lcdpld_irq,
|
||||
mask_and_ack_opsput_lcdpld,
|
||||
end_opsput_lcdpld_irq
|
||||
static struct irq_chip opsput_lcdpld_irq_type = {
|
||||
.name = "OPSPUT-PLD-LCD-IRQ",
|
||||
.irq_shutdown = shutdown_opsput_lcdpld,
|
||||
.irq_mask = mask_opsput_lcdpld,
|
||||
.irq_unmask = unmask_opsput_lcdpld,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
#if defined(CONFIG_SMC91X)
|
||||
/* INT#0: LAN controller on OPSPUT-LAN (SMC91C111)*/
|
||||
irq_desc[OPSPUT_LAN_IRQ_LAN].status = IRQ_DISABLED;
|
||||
irq_desc[OPSPUT_LAN_IRQ_LAN].chip = &opsput_lanpld_irq_type;
|
||||
irq_desc[OPSPUT_LAN_IRQ_LAN].action = 0;
|
||||
irq_desc[OPSPUT_LAN_IRQ_LAN].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(OPSPUT_LAN_IRQ_LAN, &opsput_lanpld_irq_type,
|
||||
handle_level_irq);
|
||||
lanpld_icu_data[irq2lanpldirq(OPSPUT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */
|
||||
disable_opsput_lanpld_irq(OPSPUT_LAN_IRQ_LAN);
|
||||
#endif /* CONFIG_SMC91X */
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_opsput_irq(M32R_IRQ_MFT2);
|
||||
|
||||
/* SIO0 : receive */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_opsput_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0 : send */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_opsput_irq(M32R_IRQ_SIO0_S);
|
||||
|
||||
/* SIO1 : receive */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_opsput_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1 : send */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_opsput_irq(M32R_IRQ_SIO1_S);
|
||||
|
||||
/* DMA1 : */
|
||||
irq_desc[M32R_IRQ_DMA1].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_DMA1].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_DMA1].action = 0;
|
||||
irq_desc[M32R_IRQ_DMA1].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_DMA1, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_DMA1].icucr = 0;
|
||||
disable_opsput_irq(M32R_IRQ_DMA1);
|
||||
|
||||
#ifdef CONFIG_SERIAL_M32R_PLDSIO
|
||||
/* INT#1: SIO0 Receive on PLD */
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].chip = &opsput_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].action = 0;
|
||||
irq_desc[PLD_IRQ_SIO0_RCV].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_SIO0_RCV, &opsput_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03;
|
||||
disable_opsput_pld_irq(PLD_IRQ_SIO0_RCV);
|
||||
|
||||
/* INT#1: SIO0 Send on PLD */
|
||||
irq_desc[PLD_IRQ_SIO0_SND].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_SIO0_SND].chip = &opsput_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_SIO0_SND].action = 0;
|
||||
irq_desc[PLD_IRQ_SIO0_SND].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_SIO0_SND, &opsput_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03;
|
||||
disable_opsput_pld_irq(PLD_IRQ_SIO0_SND);
|
||||
#endif /* CONFIG_SERIAL_M32R_PLDSIO */
|
||||
|
||||
/* INT#1: CFC IREQ on PLD */
|
||||
irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFIREQ].chip = &opsput_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CFIREQ].action = 0;
|
||||
irq_desc[PLD_IRQ_CFIREQ].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &opsput_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */
|
||||
disable_opsput_pld_irq(PLD_IRQ_CFIREQ);
|
||||
|
||||
/* INT#1: CFC Insert on PLD */
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].chip = &opsput_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &opsput_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */
|
||||
disable_opsput_pld_irq(PLD_IRQ_CFC_INSERT);
|
||||
|
||||
/* INT#1: CFC Eject on PLD */
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].chip = &opsput_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &opsput_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */
|
||||
disable_opsput_pld_irq(PLD_IRQ_CFC_EJECT);
|
||||
|
||||
|
@ -413,14 +348,11 @@ void __init init_IRQ(void)
|
|||
enable_opsput_irq(M32R_IRQ_INT1);
|
||||
|
||||
#if defined(CONFIG_USB)
|
||||
outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */
|
||||
|
||||
irq_desc[OPSPUT_LCD_IRQ_USB_INT1].status = IRQ_DISABLED;
|
||||
irq_desc[OPSPUT_LCD_IRQ_USB_INT1].chip = &opsput_lcdpld_irq_type;
|
||||
irq_desc[OPSPUT_LCD_IRQ_USB_INT1].action = 0;
|
||||
irq_desc[OPSPUT_LCD_IRQ_USB_INT1].depth = 1;
|
||||
lcdpld_icu_data[irq2lcdpldirq(OPSPUT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */
|
||||
disable_opsput_lcdpld_irq(OPSPUT_LCD_IRQ_USB_INT1);
|
||||
outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */
|
||||
set_irq_chip_and_handler(OPSPUT_LCD_IRQ_USB_INT1,
|
||||
&opsput_lcdpld_irq_type, handle_level_irq);
|
||||
lcdpld_icu_data[irq2lcdpldirq(OPSPUT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */
|
||||
disable_opsput_lcdpld_irq(OPSPUT_LCD_IRQ_USB_INT1);
|
||||
#endif
|
||||
/*
|
||||
* INT2# is used for BAT, USB, AUDIO
|
||||
|
@ -433,10 +365,8 @@ void __init init_IRQ(void)
|
|||
/*
|
||||
* INT3# is used for AR
|
||||
*/
|
||||
irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_INT3].chip = &opsput_irq_type;
|
||||
irq_desc[M32R_IRQ_INT3].action = 0;
|
||||
irq_desc[M32R_IRQ_INT3].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_INT3, &opsput_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_opsput_irq(M32R_IRQ_INT3);
|
||||
#endif /* CONFIG_VIDEO_M32R_AR */
|
||||
|
|
|
@ -37,39 +37,30 @@ static void enable_mappi_irq(unsigned int irq)
|
|||
outl(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_mappi(unsigned int irq)
|
||||
static void mask_mappi(struct irq_data *data)
|
||||
{
|
||||
disable_mappi_irq(irq);
|
||||
disable_mappi_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_mappi_irq(unsigned int irq)
|
||||
static void unmask_mappi(struct irq_data *data)
|
||||
{
|
||||
enable_mappi_irq(irq);
|
||||
enable_mappi_irq(data->irq);
|
||||
}
|
||||
|
||||
static unsigned int startup_mappi_irq(unsigned int irq)
|
||||
{
|
||||
enable_mappi_irq(irq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void shutdown_mappi_irq(unsigned int irq)
|
||||
static void shutdown_mappi(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
|
||||
port = irq2port(irq);
|
||||
port = irq2port(data->irq);
|
||||
outl(M32R_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip mappi_irq_type =
|
||||
{
|
||||
.name = "M32700-IRQ",
|
||||
.startup = startup_mappi_irq,
|
||||
.shutdown = shutdown_mappi_irq,
|
||||
.enable = enable_mappi_irq,
|
||||
.disable = disable_mappi_irq,
|
||||
.ack = mask_and_ack_mappi,
|
||||
.end = end_mappi_irq
|
||||
.name = "M32700-IRQ",
|
||||
.irq_shutdown = shutdown_mappi,
|
||||
.irq_mask = mask_mappi,
|
||||
.irq_unmask = unmask_mappi,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -107,42 +98,33 @@ static void enable_m32700ut_pld_irq(unsigned int irq)
|
|||
outw(data, port);
|
||||
}
|
||||
|
||||
static void mask_and_ack_m32700ut_pld(unsigned int irq)
|
||||
static void mask_m32700ut_pld(struct irq_data *data)
|
||||
{
|
||||
disable_m32700ut_pld_irq(irq);
|
||||
disable_m32700ut_pld_irq(data->irq);
|
||||
}
|
||||
|
||||
static void end_m32700ut_pld_irq(unsigned int irq)
|
||||
static void unmask_m32700ut_pld(struct irq_data *data)
|
||||
{
|
||||
enable_m32700ut_pld_irq(irq);
|
||||
end_mappi_irq(M32R_IRQ_INT1);
|
||||
enable_m32700ut_pld_irq(data->irq);
|
||||
enable_mappi_irq(M32R_IRQ_INT1);
|
||||
}
|
||||
|
||||
static unsigned int startup_m32700ut_pld_irq(unsigned int irq)
|
||||
{
|
||||
enable_m32700ut_pld_irq(irq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void shutdown_m32700ut_pld_irq(unsigned int irq)
|
||||
static void shutdown_m32700ut_pld(struct irq_data *data)
|
||||
{
|
||||
unsigned long port;
|
||||
unsigned int pldirq;
|
||||
|
||||
pldirq = irq2pldirq(irq);
|
||||
pldirq = irq2pldirq(data->irq);
|
||||
port = pldirq2port(pldirq);
|
||||
outw(PLD_ICUCR_ILEVEL7, port);
|
||||
}
|
||||
|
||||
static struct irq_chip m32700ut_pld_irq_type =
|
||||
{
|
||||
.name = "USRV-PLD-IRQ",
|
||||
.startup = startup_m32700ut_pld_irq,
|
||||
.shutdown = shutdown_m32700ut_pld_irq,
|
||||
.enable = enable_m32700ut_pld_irq,
|
||||
.disable = disable_m32700ut_pld_irq,
|
||||
.ack = mask_and_ack_m32700ut_pld,
|
||||
.end = end_m32700ut_pld_irq
|
||||
.name = "USRV-PLD-IRQ",
|
||||
.irq_shutdown = shutdown_m32700ut_pld,
|
||||
.irq_mask = mask_m32700ut_pld,
|
||||
.irq_unmask = unmask_m32700ut_pld,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
|
@ -156,53 +138,42 @@ void __init init_IRQ(void)
|
|||
once++;
|
||||
|
||||
/* MFT2 : system timer */
|
||||
irq_desc[M32R_IRQ_MFT2].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_MFT2].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_MFT2].action = 0;
|
||||
irq_desc[M32R_IRQ_MFT2].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;
|
||||
disable_mappi_irq(M32R_IRQ_MFT2);
|
||||
|
||||
#if defined(CONFIG_SERIAL_M32R_SIO)
|
||||
/* SIO0_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO0_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_R].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_R].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO0_R);
|
||||
|
||||
/* SIO0_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO0_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO0_S].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO0_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO0_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO0_S].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO0_S);
|
||||
|
||||
/* SIO1_R : uart receive data */
|
||||
irq_desc[M32R_IRQ_SIO1_R].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_R].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_R].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_R].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_R].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO1_R);
|
||||
|
||||
/* SIO1_S : uart send data */
|
||||
irq_desc[M32R_IRQ_SIO1_S].status = IRQ_DISABLED;
|
||||
irq_desc[M32R_IRQ_SIO1_S].chip = &mappi_irq_type;
|
||||
irq_desc[M32R_IRQ_SIO1_S].action = 0;
|
||||
irq_desc[M32R_IRQ_SIO1_S].depth = 1;
|
||||
set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type,
|
||||
handle_level_irq);
|
||||
icu_data[M32R_IRQ_SIO1_S].icucr = 0;
|
||||
disable_mappi_irq(M32R_IRQ_SIO1_S);
|
||||
#endif /* CONFIG_SERIAL_M32R_SIO */
|
||||
|
||||
/* INT#67-#71: CFC#0 IREQ on PLD */
|
||||
for (i = 0 ; i < CONFIG_M32R_CFC_NUM ; i++ ) {
|
||||
irq_desc[PLD_IRQ_CF0 + i].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CF0 + i].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_CF0 + i].action = 0;
|
||||
irq_desc[PLD_IRQ_CF0 + i].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_CF0 + i,
|
||||
&m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_CF0 + i)].icucr
|
||||
= PLD_ICUCR_ISMOD01; /* 'L' level sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_CF0 + i);
|
||||
|
@ -210,19 +181,15 @@ void __init init_IRQ(void)
|
|||
|
||||
#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
|
||||
/* INT#76: 16552D#0 IREQ on PLD */
|
||||
irq_desc[PLD_IRQ_UART0].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_UART0].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_UART0].action = 0;
|
||||
irq_desc[PLD_IRQ_UART0].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_UART0, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_UART0)].icucr
|
||||
= PLD_ICUCR_ISMOD03; /* 'H' level sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_UART0);
|
||||
|
||||
/* INT#77: 16552D#1 IREQ on PLD */
|
||||
irq_desc[PLD_IRQ_UART1].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_UART1].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_UART1].action = 0;
|
||||
irq_desc[PLD_IRQ_UART1].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_UART1, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_UART1)].icucr
|
||||
= PLD_ICUCR_ISMOD03; /* 'H' level sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_UART1);
|
||||
|
@ -230,10 +197,8 @@ void __init init_IRQ(void)
|
|||
|
||||
#if defined(CONFIG_IDC_AK4524) || defined(CONFIG_IDC_AK4524_MODULE)
|
||||
/* INT#80: AK4524 IREQ on PLD */
|
||||
irq_desc[PLD_IRQ_SNDINT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_SNDINT].chip = &m32700ut_pld_irq_type;
|
||||
irq_desc[PLD_IRQ_SNDINT].action = 0;
|
||||
irq_desc[PLD_IRQ_SNDINT].depth = 1; /* disable nested irq */
|
||||
set_irq_chip_and_handler(PLD_IRQ_SNDINT, &m32700ut_pld_irq_type,
|
||||
handle_level_irq);
|
||||
pld_icu_data[irq2pldirq(PLD_IRQ_SNDINT)].icucr
|
||||
= PLD_ICUCR_ISMOD01; /* 'L' level sense */
|
||||
disable_m32700ut_pld_irq(PLD_IRQ_SNDINT);
|
||||
|
|
|
@ -2,6 +2,7 @@ config M68K
|
|||
bool
|
||||
default y
|
||||
select HAVE_IDE
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
|
||||
config MMU
|
||||
bool
|
||||
|
@ -48,14 +49,6 @@ config GENERIC_HWEIGHT
|
|||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
|
|
@ -15,6 +15,8 @@ config MICROBLAZE
|
|||
select TRACING_SUPPORT
|
||||
select OF
|
||||
select OF_EARLY_FLATTREE
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_PROBE
|
||||
|
||||
config SWAP
|
||||
def_bool n
|
||||
|
@ -37,12 +39,6 @@ config GENERIC_FIND_NEXT_BIT
|
|||
config GENERIC_HWEIGHT
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
def_bool y
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
def_bool y
|
||||
|
||||
|
@ -52,9 +48,6 @@ config GENERIC_TIME_VSYSCALL
|
|||
config GENERIC_CLOCKEVENTS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_GPIO
|
||||
def_bool y
|
||||
|
||||
|
|
|
@ -793,9 +793,6 @@ config SCHED_OMIT_FRAME_POINTER
|
|||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
#
|
||||
# Select some configuration options automatically based on user selections.
|
||||
#
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
config MN10300
|
||||
def_bool y
|
||||
select HAVE_OPROFILE
|
||||
select GENERIC_HARDIRQS
|
||||
|
||||
config AM33_2
|
||||
def_bool n
|
||||
|
@ -34,9 +35,6 @@ config RWSEM_GENERIC_SPINLOCK
|
|||
config RWSEM_XCHGADD_ALGORITHM
|
||||
bool
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
def_bool y
|
||||
|
||||
|
@ -79,10 +77,6 @@ config QUICKLIST
|
|||
config ARCH_HAS_ILOG2_U32
|
||||
def_bool y
|
||||
|
||||
# Use the generic interrupt handling code in kernel/irq/
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config HOTPLUG_CPU
|
||||
def_bool n
|
||||
|
||||
|
|
|
@ -12,7 +12,10 @@ config PARISC
|
|||
select HAVE_IRQ_WORK
|
||||
select HAVE_PERF_EVENTS
|
||||
select GENERIC_ATOMIC64 if !64BIT
|
||||
select GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_PROBE
|
||||
select IRQ_PER_CPU
|
||||
|
||||
help
|
||||
The PA-RISC microprocessor is designed by Hewlett-Packard and used
|
||||
in many of their workstations & servers (HP9000 700 and 800 series,
|
||||
|
@ -66,22 +69,9 @@ config TIME_LOW_RES
|
|||
depends on SMP
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
def_bool y
|
||||
|
||||
config HAVE_LATENCYTOP_SUPPORT
|
||||
def_bool y
|
||||
|
||||
config IRQ_PER_CPU
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
# unless you want to implement ACPI on PA-RISC ... ;-)
|
||||
config PM
|
||||
bool
|
||||
|
|
|
@ -36,24 +36,12 @@ config GENERIC_TIME_VSYSCALL
|
|||
config GENERIC_CLOCKEVENTS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
bool
|
||||
default y
|
||||
|
||||
config HAVE_SETUP_PER_CPU_AREA
|
||||
def_bool PPC64
|
||||
|
||||
config NEED_PER_CPU_EMBED_FIRST_CHUNK
|
||||
def_bool PPC64
|
||||
|
||||
config IRQ_PER_CPU
|
||||
bool
|
||||
default y
|
||||
|
||||
config NR_IRQS
|
||||
int "Number of virtual interrupt numbers"
|
||||
range 32 32768
|
||||
|
@ -143,6 +131,9 @@ config PPC
|
|||
select HAVE_PERF_EVENTS
|
||||
select HAVE_REGS_AND_STACK_ACCESS_API
|
||||
select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select HAVE_SPARSE_IRQ
|
||||
select IRQ_PER_CPU
|
||||
|
||||
config EARLY_PRINTK
|
||||
bool
|
||||
|
@ -392,19 +383,6 @@ config IRQ_ALL_CPUS
|
|||
CPU. Generally saying Y is safe, although some problems have been
|
||||
reported with SMP Power Macintoshes with this option enabled.
|
||||
|
||||
config SPARSE_IRQ
|
||||
bool "Support sparse irq numbering"
|
||||
default n
|
||||
help
|
||||
This enables support for sparse irqs. This is useful for distro
|
||||
kernels that want to define a high CONFIG_NR_CPUS value but still
|
||||
want to have low kernel memory footprint on smaller machines.
|
||||
|
||||
( Sparse IRQs can also be beneficial on NUMA boxes, as they spread
|
||||
out the irq_desc[] array in a more NUMA-friendly way. )
|
||||
|
||||
If you don't know what to do here, say N.
|
||||
|
||||
config NUMA
|
||||
bool "NUMA support"
|
||||
depends on PPC64
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
menu "Machine selection"
|
||||
|
||||
config SCORE
|
||||
def_bool y
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
|
||||
choice
|
||||
prompt "System type"
|
||||
default MACH_SPCT6600
|
||||
|
@ -53,9 +57,6 @@ config GENERIC_CLOCKEVENTS
|
|||
config SCHED_NO_NO_OMIT_FRAME_POINTER
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_SYSCALL_TABLE
|
||||
def_bool y
|
||||
|
||||
|
@ -68,9 +69,6 @@ menu "Kernel type"
|
|||
config 32BIT
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config ARCH_FLATMEM_ENABLE
|
||||
def_bool y
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ config SPARC64
|
|||
select RTC_DRV_STARFIRE
|
||||
select HAVE_PERF_EVENTS
|
||||
select PERF_USE_VMALLOC
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
|
||||
config ARCH_DEFCONFIG
|
||||
string
|
||||
|
@ -107,10 +108,6 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK
|
|||
config NEED_PER_CPU_PAGE_FIRST_CHUNK
|
||||
def_bool y if SPARC64
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
bool
|
||||
def_bool y if SPARC64
|
||||
|
||||
config MMU
|
||||
bool
|
||||
default y
|
||||
|
@ -276,10 +273,6 @@ config HOTPLUG_CPU
|
|||
can be controlled through /sys/devices/system/cpu/cpu#.
|
||||
Say N if you want to disable CPU hotplug.
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y if SPARC64
|
||||
|
||||
source "kernel/time/Kconfig"
|
||||
|
||||
if SPARC64
|
||||
|
|
|
@ -1,25 +1,34 @@
|
|||
# For a description of the syntax of this configuration file,
|
||||
# see Documentation/kbuild/config-language.txt.
|
||||
|
||||
config TILE
|
||||
def_bool y
|
||||
select HAVE_KVM if !TILEGX
|
||||
select GENERIC_FIND_FIRST_BIT
|
||||
select GENERIC_FIND_NEXT_BIT
|
||||
select USE_GENERIC_SMP_HELPERS
|
||||
select CC_OPTIMIZE_FOR_SIZE
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select GENERIC_IRQ_PROBE
|
||||
select GENERIC_PENDING_IRQ if SMP
|
||||
|
||||
# FIXME: investigate whether we need/want these options.
|
||||
# select HAVE_IOREMAP_PROT
|
||||
# select HAVE_OPTPROBES
|
||||
# select HAVE_REGS_AND_STACK_ACCESS_API
|
||||
# select HAVE_HW_BREAKPOINT
|
||||
# select PERF_EVENTS
|
||||
# select HAVE_USER_RETURN_NOTIFIER
|
||||
# config NO_BOOTMEM
|
||||
# config ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||
# config HUGETLB_PAGE_SIZE_VARIABLE
|
||||
|
||||
config MMU
|
||||
def_bool y
|
||||
|
||||
config GENERIC_CSUM
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config GENERIC_IRQ_PROBE
|
||||
def_bool y
|
||||
|
||||
config GENERIC_PENDING_IRQ
|
||||
def_bool y
|
||||
depends on GENERIC_HARDIRQS && SMP
|
||||
|
||||
config SEMAPHORE_SLEEPERS
|
||||
def_bool y
|
||||
|
||||
|
@ -97,26 +106,6 @@ config HVC_TILE
|
|||
select HVC_DRIVER
|
||||
def_bool y
|
||||
|
||||
config TILE
|
||||
def_bool y
|
||||
select HAVE_KVM if !TILEGX
|
||||
select GENERIC_FIND_FIRST_BIT
|
||||
select GENERIC_FIND_NEXT_BIT
|
||||
select USE_GENERIC_SMP_HELPERS
|
||||
select CC_OPTIMIZE_FOR_SIZE
|
||||
|
||||
# FIXME: investigate whether we need/want these options.
|
||||
# select HAVE_IOREMAP_PROT
|
||||
# select HAVE_OPTPROBES
|
||||
# select HAVE_REGS_AND_STACK_ACCESS_API
|
||||
# select HAVE_HW_BREAKPOINT
|
||||
# select PERF_EVENTS
|
||||
# select HAVE_USER_RETURN_NOTIFIER
|
||||
# config NO_BOOTMEM
|
||||
# config ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||
# config HUGETLB_PAGE_SIZE_VARIABLE
|
||||
|
||||
|
||||
# Please note: TILE-Gx support is not yet finalized; this is
|
||||
# the preliminary support. TILE-Gx drivers are only provided
|
||||
# with the alpha or beta test versions for Tilera customers.
|
||||
|
|
|
@ -3,14 +3,10 @@ config DEFCONFIG_LIST
|
|||
option defconfig_list
|
||||
default "arch/$ARCH/defconfig"
|
||||
|
||||
# UML uses the generic IRQ subsystem
|
||||
config GENERIC_HARDIRQS
|
||||
bool
|
||||
default y
|
||||
|
||||
config UML
|
||||
bool
|
||||
default y
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
|
||||
config MMU
|
||||
bool
|
||||
|
|
|
@ -120,9 +120,6 @@ config SMP
|
|||
|
||||
If you don't know what to do, say N.
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
config NR_CPUS
|
||||
int "Maximum number of CPUs (2-32)"
|
||||
range 2 32
|
||||
|
|
|
@ -100,13 +100,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node)
|
|||
#define get_irq_desc_data(desc) ((desc)->irq_data.handler_data)
|
||||
#define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc)
|
||||
|
||||
/*
|
||||
* Monolithic do_IRQ implementation.
|
||||
*/
|
||||
#ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
extern unsigned int __do_IRQ(unsigned int irq);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Architectures call this to let the generic IRQ layer
|
||||
* handle an interrupt. If the descriptor is attached to an
|
||||
|
@ -115,14 +108,7 @@ extern unsigned int __do_IRQ(unsigned int irq);
|
|||
*/
|
||||
static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
desc->handle_irq(irq, desc);
|
||||
#else
|
||||
if (likely(desc->handle_irq))
|
||||
desc->handle_irq(irq, desc);
|
||||
else
|
||||
__do_IRQ(irq);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void generic_handle_irq(unsigned int irq)
|
||||
|
|
|
@ -9,9 +9,6 @@ menu "IRQ subsystem"
|
|||
config GENERIC_HARDIRQS
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
def_bool y
|
||||
|
||||
# Select this to disable the deprecated stuff
|
||||
config GENERIC_HARDIRQS_NO_DEPRECATED
|
||||
def_bool n
|
||||
|
|
|
@ -118,114 +118,3 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
|
|||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
|
||||
#ifdef CONFIG_ENABLE_WARN_DEPRECATED
|
||||
# warning __do_IRQ is deprecated. Please convert to proper flow handlers
|
||||
#endif
|
||||
|
||||
/**
|
||||
* __do_IRQ - original all in one highlevel IRQ handler
|
||||
* @irq: the interrupt number
|
||||
*
|
||||
* __do_IRQ handles all normal device IRQ's (the special
|
||||
* SMP cross-CPU interrupts have their own specific
|
||||
* handlers).
|
||||
*
|
||||
* This is the original x86 implementation which is used for every
|
||||
* interrupt type.
|
||||
*/
|
||||
unsigned int __do_IRQ(unsigned int irq)
|
||||
{
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
struct irqaction *action;
|
||||
unsigned int status;
|
||||
|
||||
kstat_incr_irqs_this_cpu(irq, desc);
|
||||
|
||||
if (CHECK_IRQ_PER_CPU(desc->status)) {
|
||||
irqreturn_t action_ret;
|
||||
|
||||
/*
|
||||
* No locking required for CPU-local interrupts:
|
||||
*/
|
||||
if (desc->irq_data.chip->ack)
|
||||
desc->irq_data.chip->ack(irq);
|
||||
if (likely(!(desc->status & IRQ_DISABLED))) {
|
||||
action_ret = handle_IRQ_event(irq, desc->action);
|
||||
if (!noirqdebug)
|
||||
note_interrupt(irq, desc, action_ret);
|
||||
}
|
||||
desc->irq_data.chip->end(irq);
|
||||
return 1;
|
||||
}
|
||||
|
||||
raw_spin_lock(&desc->lock);
|
||||
if (desc->irq_data.chip->ack)
|
||||
desc->irq_data.chip->ack(irq);
|
||||
/*
|
||||
* REPLAY is when Linux resends an IRQ that was dropped earlier
|
||||
* WAITING is used by probe to mark irqs that are being tested
|
||||
*/
|
||||
status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
|
||||
status |= IRQ_PENDING; /* we _want_ to handle it */
|
||||
|
||||
/*
|
||||
* If the IRQ is disabled for whatever reason, we cannot
|
||||
* use the action we have.
|
||||
*/
|
||||
action = NULL;
|
||||
if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) {
|
||||
action = desc->action;
|
||||
status &= ~IRQ_PENDING; /* we commit to handling */
|
||||
status |= IRQ_INPROGRESS; /* we are handling it */
|
||||
}
|
||||
desc->status = status;
|
||||
|
||||
/*
|
||||
* If there is no IRQ handler or it was disabled, exit early.
|
||||
* Since we set PENDING, if another processor is handling
|
||||
* a different instance of this same irq, the other processor
|
||||
* will take care of it.
|
||||
*/
|
||||
if (unlikely(!action))
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Edge triggered interrupts need to remember
|
||||
* pending events.
|
||||
* This applies to any hw interrupts that allow a second
|
||||
* instance of the same irq to arrive while we are in do_IRQ
|
||||
* or in the handler. But the code here only handles the _second_
|
||||
* instance of the irq, not the third or fourth. So it is mostly
|
||||
* useful for irq hardware that does not mask cleanly in an
|
||||
* SMP environment.
|
||||
*/
|
||||
for (;;) {
|
||||
irqreturn_t action_ret;
|
||||
|
||||
raw_spin_unlock(&desc->lock);
|
||||
|
||||
action_ret = handle_IRQ_event(irq, action);
|
||||
if (!noirqdebug)
|
||||
note_interrupt(irq, desc, action_ret);
|
||||
|
||||
raw_spin_lock(&desc->lock);
|
||||
if (likely(!(desc->status & IRQ_PENDING)))
|
||||
break;
|
||||
desc->status &= ~IRQ_PENDING;
|
||||
}
|
||||
desc->status &= ~IRQ_INPROGRESS;
|
||||
|
||||
out:
|
||||
/*
|
||||
* The ->end() handler has to deal with interrupts which got
|
||||
* disabled while the handler was running.
|
||||
*/
|
||||
desc->irq_data.chip->end(irq);
|
||||
raw_spin_unlock(&desc->lock);
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue