| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | #include "picorv32.h"#include "fw.h"#include "console.h"/* Invalid interrupt */static void spurious_irq_handler(unsigned int vector){    mask_irq(vector);}/* Valid edge-triggered interrupt just to wake up waitirq */void null_irq_handler(unsigned int vector){}irq_handler_t __irq_handler_table[IRQ_VECTORS] =  { [0 ... IRQ_VECTORS-1] = spurious_irq_handler };irq_handler_t register_irq(unsigned int vector, irq_handler_t handler,			   bool enable){    irq_handler_t old_handler;    if (vector >= IRQ_VECTORS)	return NULL;		/* Invalid vector */    mask_irq(vector);    if (!handler) {	enable = false;	handler = spurious_irq_handler;    }        old_handler = __irq_handler_table[vector];    __irq_handler_table[vector] = handler;    if (enable && handler)	unmask_irq(vector);    if (old_handler == spurious_irq_handler)	handler = NULL;    con_printf("irq: register vector %u, mask = %08x\n",	       vector, irqmask());    return old_handler;}
 |