BNX2X: Spatch dev_addr->ea
[akaros.git] / kern / include / trap.h
index 78deb69..60e25d5 100644 (file)
@@ -7,37 +7,16 @@
 #include <arch/arch.h>
 #include <arch/mmu.h>
 #include <sys/queue.h>
-/* #include <arch/trap.h> included below */
-
-/* For kernel contexts, when we save/restore/move them around.  For now, we'll
- * just use the old trapframe/hw_trap, but in the future we can slim this down a
- * bit.  Additionally, we might have different types of these in the future, if
- * we ever do non-cooperative kthread scheduling. */
-struct kernel_ctx {
-       /* RISCV's current pop_kernel_ctx assumes the hw_tf is the first member */
-       struct hw_trapframe             hw_tf;
-};
-
-/* Arch needs to hear about kernel_ctx */
 #include <arch/trap.h>
 
 // func ptr for interrupt service routines
-typedef void (*poly_isr_t)(struct hw_trapframe *hw_tf, void *data);
 typedef void (*isr_t)(struct hw_trapframe *hw_tf, void *data);
-typedef struct InterruptHandler {
-       poly_isr_t isr;
-       TV(t) data;
-} handler_t;
-
-extern handler_t interrupt_handlers[];
 
 void idt_init(void);
-void
-register_interrupt_handler(handler_t SSOMELOCK (CT(NUM_INTERRUPT_HANDLERS)table)[],
-                           uint8_t int_num,
-                           poly_isr_t handler, TV(t) data);
+int register_irq(int irq, isr_t handler, void *irq_arg, uint32_t tbdf);
+int route_irqs(int cpu_vec, int coreid);
 void print_trapframe(struct hw_trapframe *hw_tf);
-void page_fault_handler(struct hw_trapframe *hw_tf);
+void print_user_ctx(struct user_context *ctx);
 /* Generic per-core timer interrupt handler.  set_percore_timer() will fire the
  * timer_interrupt(). */
 void set_core_timer(uint32_t usec, bool periodic);
@@ -51,13 +30,11 @@ extern inline void init_fp_state(void);
 void set_stack_top(uintptr_t stacktop);
 uintptr_t get_stack_top(void);
 
-/* It's important that this is inline and that ctx is not a stack variable */
-static inline void save_kernel_ctx(struct kernel_ctx *ctx)
-                   __attribute__((always_inline));
-void pop_kernel_ctx(struct kernel_ctx *ctx) __attribute__((noreturn));
-
-/* Sends a non-maskable interrupt, which we have print a trapframe. */
 void send_nmi(uint32_t os_coreid);
+void reflect_unhandled_trap(unsigned int trap_nr, unsigned int err,
+                            unsigned long aux);
+void __arch_reflect_trap_hwtf(struct hw_trapframe *hw_tf, unsigned int trap_nr,
+                              unsigned int err, unsigned long aux);
 
 /* Kernel messages.  This is an in-order 'active message' style messaging
  * subsystem, where you can instruct other cores (including your own) to execute
@@ -100,6 +77,7 @@ void kernel_msg_init(void);
 uint32_t send_kernel_message(uint32_t dst, amr_t pc, long arg0, long arg1,
                              long arg2, int type);
 void handle_kmsg_ipi(struct hw_trapframe *hw_tf, void *data);
+bool has_routine_kmsg(void);
 void process_routine_kmsg(void);
 void print_kmsgs(uint32_t coreid);