microblaze: intc: Registering interrupt should return value

Return value to find out if un/registration was succesful.

Signed-off-by: Michal Simek <monstr@monstr.eu>
This commit is contained in:
Michal Simek 2012-06-29 14:21:52 +02:00
parent e35c05baa1
commit 8706908a25
2 changed files with 19 additions and 8 deletions

View File

@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
#endif #endif
} }
/* adding new handler for interrupt */ int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
{ {
struct irq_action *act; struct irq_action *act;
/* irq out of range */ /* irq out of range */
if ((irq < 0) || (irq > irq_no)) { if ((irq < 0) || (irq > irq_no)) {
puts ("IRQ out of range\n"); puts ("IRQ out of range\n");
return; return -1;
} }
act = &vecs[irq]; act = &vecs[irq];
if (hdlr) { /* enable */ if (hdlr) { /* enable */
@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
act->arg = arg; act->arg = arg;
act->count = 0; act->count = 0;
enable_one_interrupt (irq); enable_one_interrupt (irq);
} else { /* disable */ return 0;
act->handler = (interrupt_handler_t *) def_hdlr;
act->arg = (void *)irq;
disable_one_interrupt (irq);
} }
/* Disable */
act->handler = (interrupt_handler_t *) def_hdlr;
act->arg = (void *)irq;
disable_one_interrupt(irq);
return 1;
} }
/* initialization interrupt controller - hardware */ /* initialization interrupt controller - hardware */

View File

@ -39,7 +39,16 @@ struct irq_action {
int count; /* number of interrupt */ int count; /* number of interrupt */
}; };
void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, /**
* Register and unregister interrupt handler rutines
*
* @param irq IRQ number
* @param hdlr Interrupt handler rutine
* @param arg Pointer to argument which is passed to int. handler rutine
* @return 0 if registration pass, 1 if unregistration pass,
* or an error code < 0 otherwise
*/
int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
void *arg); void *arg);
int interrupts_init(void); int interrupts_init(void);