Interrupt handlers and smp_calls take a void*
[akaros.git] / kern / trap.h
1 /* See COPYRIGHT for copyright information. */
2
3 #ifndef ROS_KERN_TRAP_H
4 #define ROS_KERN_TRAP_H
5 #ifndef ROS_KERNEL
6 # error "This is an ROS kernel header; user programs should not #include it"
7 #endif
8
9 #include <inc/trap.h>
10 #include <inc/mmu.h>
11
12 // func ptr for interrupt service routines
13 typedef void (*isr_t)(trapframe_t* tf, void* data);
14 typedef struct InterruptHandler {
15         isr_t isr;
16         void* data;
17 } handler_t;
18
19 /* The kernel's interrupt descriptor table */
20 extern gatedesc_t idt[];
21
22 void idt_init(void);
23 void register_interrupt_handler(handler_t (COUNT(256)table)[], uint8_t int_num,
24                                 isr_t handler, void* data);
25 void (IN_HANDLER print_regs)(push_regs_t *regs);
26 void (IN_HANDLER print_trapframe)(trapframe_t *tf);
27 void (IN_HANDLER page_fault_handler)(trapframe_t *tf);
28 void backtrace(trapframe_t *tf);
29
30 #endif /* ROS_KERN_TRAP_H */