Rev 33 | Rev 73 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 33 | Rev 68 | ||
---|---|---|---|
Line 26... | Line 26... | ||
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | #include <arch/interrupt.h> |
29 | #include <arch/interrupt.h> |
30 | #include <print.h> |
30 | #include <print.h> |
- | 31 | #include <debug.h> |
|
31 | #include <panic.h> |
32 | #include <panic.h> |
32 | #include <arch/i8259.h> |
33 | #include <arch/i8259.h> |
33 | #include <func.h> |
34 | #include <func.h> |
34 | #include <cpu.h> |
35 | #include <cpu.h> |
35 | #include <arch/asm.h> |
36 | #include <arch/asm.h> |
Line 46... | Line 47... | ||
46 | void (* enable_irqs_function)(__u16 irqmask) = NULL; |
47 | void (* enable_irqs_function)(__u16 irqmask) = NULL; |
47 | void (* eoi_function)(void) = NULL; |
48 | void (* eoi_function)(void) = NULL; |
48 | 49 | ||
49 | iroutine trap_register(__u8 n, iroutine f) |
50 | iroutine trap_register(__u8 n, iroutine f) |
50 | { |
51 | { |
- | 52 | ASSERT(n < IVT_ITEMS); |
|
- | 53 | ||
51 | iroutine old; |
54 | iroutine old; |
52 | 55 | ||
53 | old = ivt[n]; |
56 | old = ivt[n]; |
54 | ivt[n] = f; |
57 | ivt[n] = f; |
55 | 58 | ||
56 | return old; |
59 | return old; |
57 | } |
60 | } |
58 | 61 | ||
59 | /* |
62 | /* |
60 | * Called directly from the assembler code. |
63 | * Called directly from the assembler code. |
61 | * CPU is cpu_priority_high(). |
64 | * CPU is cpu_priority_high(). |
62 | */ |
65 | */ |
63 | void trap_dispatcher(__u8 n, __u32 stack[]) |
66 | void trap_dispatcher(__u8 n, __u32 stack[]) |
64 | { |
67 | { |
- | 68 | ASSERT(n < IVT_ITEMS); |
|
- | 69 | ||
65 | ivt[n](n,stack); |
70 | ivt[n](n, stack); |
66 | } |
71 | } |
67 | 72 | ||
68 | void null_interrupt(__u8 n, __u32 stack[]) |
73 | void null_interrupt(__u8 n, __u32 stack[]) |
69 | { |
74 | { |
70 | printf("int %d: null_interrupt\n", n); |
75 | printf("int %d: null_interrupt\n", n); |
Line 110... | Line 115... | ||
110 | void trap_virtual_enable_irqs(__u16 irqmask) |
115 | void trap_virtual_enable_irqs(__u16 irqmask) |
111 | { |
116 | { |
112 | if (enable_irqs_function) |
117 | if (enable_irqs_function) |
113 | enable_irqs_function(irqmask); |
118 | enable_irqs_function(irqmask); |
114 | else |
119 | else |
115 | panic(PANIC "no enable_irqs_function\n"); |
120 | panic("no enable_irqs_function\n"); |
116 | } |
121 | } |
117 | 122 | ||
118 | void trap_virtual_disable_irqs(__u16 irqmask) |
123 | void trap_virtual_disable_irqs(__u16 irqmask) |
119 | { |
124 | { |
120 | if (disable_irqs_function) |
125 | if (disable_irqs_function) |
121 | disable_irqs_function(irqmask); |
126 | disable_irqs_function(irqmask); |
122 | else |
127 | else |
123 | panic(PANIC "no disable_irqs_function\n"); |
128 | panic("no disable_irqs_function\n"); |
124 | } |
129 | } |
125 | 130 | ||
126 | void trap_virtual_eoi(void) |
131 | void trap_virtual_eoi(void) |
127 | { |
132 | { |
128 | if (eoi_function) |
133 | if (eoi_function) |
129 | eoi_function(); |
134 | eoi_function(); |
130 | else |
135 | else |
131 | panic(PANIC "no eoi_function\n"); |
136 | panic("no eoi_function\n"); |
132 | 137 | ||
133 | } |
138 | } |