Rev 958 | Rev 1260 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 958 | Rev 1258 | ||
|---|---|---|---|
| Line 32... | Line 32... | ||
| 32 | #include <arch.h> |
32 | #include <arch.h> |
| 33 | #include <arch/cp0.h> |
33 | #include <arch/cp0.h> |
| 34 | #include <time/clock.h> |
34 | #include <time/clock.h> |
| 35 | #include <arch/drivers/arc.h> |
35 | #include <arch/drivers/arc.h> |
| 36 | 36 | ||
| - | 37 | #include <ipc/sysipc.h> |
|
| - | 38 | ||
| 37 | /** Disable interrupts. |
39 | /** Disable interrupts. |
| 38 | * |
40 | * |
| 39 | * @return Old interrupt priority level. |
41 | * @return Old interrupt priority level. |
| 40 | */ |
42 | */ |
| 41 | ipl_t interrupts_disable(void) |
43 | ipl_t interrupts_disable(void) |
| Line 81... | Line 83... | ||
| 81 | } |
83 | } |
| 82 | 84 | ||
| 83 | static void swint0(int n, istate_t *istate) |
85 | static void swint0(int n, istate_t *istate) |
| 84 | { |
86 | { |
| 85 | cp0_cause_write(cp0_cause_read() & ~(1 << 8)); /* clear SW0 interrupt */ |
87 | cp0_cause_write(cp0_cause_read() & ~(1 << 8)); /* clear SW0 interrupt */ |
| - | 88 | ipc_irq_send_notif(0); |
|
| 86 | } |
89 | } |
| 87 | 90 | ||
| 88 | static void swint1(int n, istate_t *istate) |
91 | static void swint1(int n, istate_t *istate) |
| 89 | { |
92 | { |
| 90 | cp0_cause_write(cp0_cause_read() & ~(1 << 9)); /* clear SW1 interrupt */ |
93 | cp0_cause_write(cp0_cause_read() & ~(1 << 9)); /* clear SW1 interrupt */ |
| - | 94 | ipc_irq_send_notif(1); |
|
| 91 | } |
95 | } |
| 92 | 96 | ||
| 93 | /* Initialize basic tables for exception dispatching */ |
97 | /* Initialize basic tables for exception dispatching */ |
| 94 | void interrupt_init(void) |
98 | void interrupt_init(void) |
| 95 | { |
99 | { |
| 96 | int_register(TIMER_IRQ, "timer", timer_exception); |
100 | int_register(TIMER_IRQ, "timer", timer_exception); |
| 97 | int_register(0, "swint0", swint0); |
101 | int_register(0, "swint0", swint0); |
| 98 | int_register(1, "swint1", swint1); |
102 | int_register(1, "swint1", swint1); |
| 99 | } |
103 | } |
| - | 104 | ||
| - | 105 | #include <print.h> |
|
| - | 106 | static void ipc_int(int n, istate_t *istate) |
|
| - | 107 | { |
|
| - | 108 | ipc_irq_send_notif(n-INT_OFFSET); |
|
| - | 109 | } |
|
| - | 110 | ||
| - | 111 | /* Reregister irq to be IPC-ready */ |
|
| - | 112 | void irq_ipc_bind_arch(__native irq) |
|
| - | 113 | { |
|
| - | 114 | /* Do not allow to redefine timer */ |
|
| - | 115 | /* Swint0, Swint1 are already handled */ |
|
| - | 116 | if (irq == TIMER_IRQ || irq < 2) |
|
| - | 117 | return; |
|
| - | 118 | int_register(irq, "ipc_int", ipc_int); |
|
| - | 119 | } |
|