//kernel/trunk/arch/amd64/src/interrupt.c |
---|
44,6 → 44,8 |
#include <proc/task.h> |
#include <synch/spinlock.h> |
#include <arch/ddi/ddi.h> |
#include <interrupt.h> |
#include <ipc/sysipc.h> |
void print_info_errcode(int n, istate_t *istate) |
{ |
153,3 → 155,18 |
panic("no eoi_function\n"); |
} |
static void ipc_int(int n, istate_t *istate) |
{ |
trap_virtual_eoi(); |
ipc_irq_send_notif(n-IVT_IRQBASE); |
} |
/* Reregister irq to be IPC-ready */ |
void irq_ipc_bind_arch(__native irq) |
{ |
if (irq == IRQ_CLK) |
return; |
exc_register(IVT_IRQBASE+irq, "ipc_int", ipc_int); |
} |
//kernel/trunk/arch/mips32/include/interrupt.h |
---|
33,6 → 33,7 |
#define IVT_ITEMS 40 |
#define INT_OFFSET 32 |
#define IRQ_COUNT 8 |
#define int_register(it, name, handler) exc_register(((it)+INT_OFFSET),name,handler) |
//kernel/trunk/arch/mips32/src/interrupt.c |
---|
34,6 → 34,8 |
#include <time/clock.h> |
#include <arch/drivers/arc.h> |
#include <ipc/sysipc.h> |
/** Disable interrupts. |
* |
* @return Old interrupt priority level. |
83,11 → 85,13 |
static void swint0(int n, istate_t *istate) |
{ |
cp0_cause_write(cp0_cause_read() & ~(1 << 8)); /* clear SW0 interrupt */ |
ipc_irq_send_notif(0); |
} |
static void swint1(int n, istate_t *istate) |
{ |
cp0_cause_write(cp0_cause_read() & ~(1 << 9)); /* clear SW1 interrupt */ |
ipc_irq_send_notif(1); |
} |
/* Initialize basic tables for exception dispatching */ |
97,3 → 101,19 |
int_register(0, "swint0", swint0); |
int_register(1, "swint1", swint1); |
} |
#include <print.h> |
static void ipc_int(int n, istate_t *istate) |
{ |
ipc_irq_send_notif(n-INT_OFFSET); |
} |
/* Reregister irq to be IPC-ready */ |
void irq_ipc_bind_arch(__native irq) |
{ |
/* Do not allow to redefine timer */ |
/* Swint0, Swint1 are already handled */ |
if (irq == TIMER_IRQ || irq < 2) |
return; |
int_register(irq, "ipc_int", ipc_int); |
} |
//kernel/trunk/arch/ia32/src/interrupt.c |
---|
43,6 → 43,8 |
#include <proc/task.h> |
#include <synch/spinlock.h> |
#include <arch/ddi/ddi.h> |
#include <ipc/sysipc.h> |
#include <interrupt.h> |
/* |
* Interrupt and exception dispatching. |
184,3 → 186,18 |
panic("no eoi_function\n"); |
} |
static void ipc_int(int n, istate_t *istate) |
{ |
trap_virtual_eoi(); |
ipc_irq_send_notif(n-IVT_IRQBASE); |
} |
/* Reregister irq to be IPC-ready */ |
void irq_ipc_bind_arch(__native irq) |
{ |
if (irq == IRQ_CLK) |
return; |
exc_register(IVT_IRQBASE+irq, "ipc_int", ipc_int); |
} |