Start bringing networking back in
[akaros.git] / kern / include / trap.h
index b7847b2..2a91f78 100644 (file)
@@ -7,39 +7,20 @@
 #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;
-
-#ifdef __IVY__
-#pragma cilnoremove("iht_lock")
-extern spinlock_t iht_lock;
-#endif
-extern handler_t LCKD(&iht_lock) (CT(NUM_INTERRUPT_HANDLERS) RO interrupt_handlers)[];
+struct irq_handler {
+       isr_t isr;
+       void *data;
+       struct irq_handler *next;
+};
 
 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);
+void register_raw_irq(unsigned int vector, isr_t handler, void *data);
+void unregister_raw_irq(unsigned int vector, isr_t handler, void *data);
+int register_dev_irq(int irq, isr_t handler, void *irq_arg);
 void print_trapframe(struct hw_trapframe *hw_tf);
 void page_fault_handler(struct hw_trapframe *hw_tf);
 /* Generic per-core timer interrupt handler.  set_percore_timer() will fire the
@@ -47,9 +28,6 @@ void page_fault_handler(struct hw_trapframe *hw_tf);
 void set_core_timer(uint32_t usec, bool periodic);
 void timer_interrupt(struct hw_trapframe *hw_tf, void *data);
 
-void sysenter_init(void);
-extern void sysenter_handler();
-
 extern inline void save_fp_state(struct ancillary_state *silly);
 extern inline void restore_fp_state(struct ancillary_state *silly);
 extern inline void init_fp_state(void);
@@ -60,7 +38,7 @@ 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));
+                   __attribute__((always_inline, returns_twice));
 void pop_kernel_ctx(struct kernel_ctx *ctx) __attribute__((noreturn));
 
 /* Sends a non-maskable interrupt, which we have print a trapframe. */