| /* Basic functions for adding/removing custom exception handlers | |
| * | |
| * Copyright 2004-2009 Analog Devices Inc. | |
| * | |
| * Licensed under the GPL-2 or later | |
| */ | |
| #include <linux/module.h> | |
| #include <asm/irq_handler.h> | |
| int bfin_request_exception(unsigned int exception, void (*handler)(void)) | |
| { | |
| void (*curr_handler)(void); | |
| if (exception > 0x3F) | |
| return -EINVAL; | |
| curr_handler = ex_table[exception]; | |
| if (curr_handler != ex_replaceable) | |
| return -EBUSY; | |
| ex_table[exception] = handler; | |
| return 0; | |
| } | |
| EXPORT_SYMBOL(bfin_request_exception); | |
| int bfin_free_exception(unsigned int exception, void (*handler)(void)) | |
| { | |
| void (*curr_handler)(void); | |
| if (exception > 0x3F) | |
| return -EINVAL; | |
| curr_handler = ex_table[exception]; | |
| if (curr_handler != handler) | |
| return -EBUSY; | |
| ex_table[exception] = ex_replaceable; | |
| return 0; | |
| } | |
| EXPORT_SYMBOL(bfin_free_exception); |