]>
Commit | Line | Data |
---|---|---|
2d5b561e | 1 | /* |
ba94a1bb WD |
2 | * (C) Copyright 2006 |
3 | * Stefan Roese, DENX Software Engineering, sr@denx.de. | |
4 | * | |
2d5b561e WD |
5 | * (C) Copyright 2002 |
6 | * Sysgo Real-Time Solutions, GmbH <www.elinos.com> | |
7 | * Marius Groeger <mgroeger@sysgo.de> | |
8 | * | |
9 | * (C) Copyright 2002 | |
10 | * Sysgo Real-Time Solutions, GmbH <www.elinos.com> | |
11 | * Alex Zuepke <azu@sysgo.de> | |
12 | * | |
1a459660 | 13 | * SPDX-License-Identifier: GPL-2.0+ |
2d5b561e WD |
14 | */ |
15 | ||
16 | #include <common.h> | |
17 | #include <asm/arch/ixp425.h> | |
6d0943a6 AE |
18 | #include <asm/proc-armv/ptrace.h> |
19 | ||
ba94a1bb WD |
20 | struct _irq_handler { |
21 | void *m_data; | |
22 | void (*m_func)( void *data); | |
23 | }; | |
24 | ||
25 | static struct _irq_handler IRQ_HANDLER[N_IRQS]; | |
26 | ||
ba94a1bb WD |
27 | static void default_isr(void *data) |
28 | { | |
29 | printf("default_isr(): called for IRQ %d, Interrupt Status=%x PR=%x\n", | |
30 | (int)data, *IXP425_ICIP, *IXP425_ICIH); | |
31 | } | |
32 | ||
33 | static int next_irq(void) | |
34 | { | |
35 | return (((*IXP425_ICIH & 0x000000fc) >> 2) - 1); | |
36 | } | |
37 | ||
b54384e3 | 38 | void do_irq (struct pt_regs *pt_regs) |
ba94a1bb | 39 | { |
b54384e3 | 40 | int irq = next_irq(); |
ba94a1bb | 41 | |
b54384e3 | 42 | IRQ_HANDLER[irq].m_func(IRQ_HANDLER[irq].m_data); |
ba94a1bb WD |
43 | } |
44 | ||
b54384e3 | 45 | void irq_install_handler (int irq, interrupt_handler_t handle_irq, void *data) |
2d5b561e | 46 | { |
b54384e3 JCPV |
47 | if (irq >= N_IRQS || !handle_irq) |
48 | return; | |
ba94a1bb | 49 | |
b54384e3 JCPV |
50 | IRQ_HANDLER[irq].m_data = data; |
51 | IRQ_HANDLER[irq].m_func = handle_irq; | |
2d5b561e WD |
52 | } |
53 | ||
c358d9c3 | 54 | int arch_interrupt_init (void) |
2d5b561e | 55 | { |
ba94a1bb WD |
56 | int i; |
57 | ||
58 | /* install default interrupt handlers */ | |
b54384e3 JCPV |
59 | for (i = 0; i < N_IRQS; i++) |
60 | irq_install_handler(i, default_isr, (void *)i); | |
ba94a1bb WD |
61 | |
62 | /* configure interrupts for IRQ mode */ | |
63 | *IXP425_ICLR = 0x00000000; | |
64 | ||
2d5b561e WD |
65 | return (0); |
66 | } |