Pmap ops: perm->settings
[akaros.git] / kern / arch / riscv / trap.c
index 39fe97c..1d9055d 100644 (file)
@@ -130,7 +130,9 @@ static void exit_halt_loop(struct hw_trapframe *hw_tf)
 
 static void handle_keypress(char c)
 {
-       amr_t handler = c == 'G' ? __run_mon : __cons_add_char;
+       /* brho: not sure if this will work on riscv or not... */
+       #define capchar2ctl(x) ((x) - '@')
+       amr_t handler = c == capchar2ctl('G') ? __run_mon : __cons_add_char;
        send_kernel_message(core_id(), handler, (long)&cons_buf, (long)c, 0,
                            KMSG_ROUTINE);
        cons_init();
@@ -214,6 +216,7 @@ handle_fault_fetch(struct hw_trapframe *state)
 
        set_current_ctx_hw(&per_cpu_info[core_id()], state);
 
+#warning "returns EAGAIN if you should reflect the fault"
        if(handle_page_fault(current, state->epc, PROT_EXEC))
                unhandled_trap(state, "Instruction Page Fault");
 }
@@ -229,6 +232,7 @@ handle_fault_load(struct hw_trapframe *state)
 
        set_current_ctx_hw(&per_cpu_info[core_id()], state);
 
+#warning "returns EAGAIN if you should reflect the fault"
        if(handle_page_fault(current, state->badvaddr, PROT_READ))
                unhandled_trap(state, "Load Page Fault");
 }
@@ -332,6 +336,8 @@ handle_trap(struct hw_trapframe *hw_tf)
                } else {
                        trap_handlers[hw_tf->cause](hw_tf);
                }
+               #warning "if a trap wasn't handled fully, like an MCP pf, reflect it
+               reflect_unhandled_trap(hw_tf->tf_trapno, hw_tf->tf_err, aux);
        }
        
        extern void pop_hw_tf(struct hw_trapframe *tf); /* in asm */
@@ -350,18 +356,20 @@ void send_nmi(uint32_t os_coreid)
        printk("%s not implemented\n", __FUNCTION);
 }
 
-void register_raw_irq(unsigned int vector, isr_t handler, void *data)
+int register_irq(int irq, isr_t handler, void *irq_arg, uint32_t tbdf)
 {
        printk("%s not implemented\n", __FUNCTION);
+       return -1;
 }
 
-void unregister_raw_irq(unsigned int vector, isr_t handler, void *data)
+int route_irqs(int cpu_vec, int coreid)
 {
        printk("%s not implemented\n", __FUNCTION);
+       return -1;
 }
 
-int register_dev_irq(int irq, void (*handler)(struct hw_trapframe *, void *),
-                     void *irq_arg)
+void __arch_reflect_trap_hwtf(struct hw_trapframe *hw_tf, unsigned int trap_nr,
+                              unsigned int err, unsigned long aux)
 {
        printk("%s not implemented\n", __FUNCTION);
 }