1 /* Basic functions for adding/removing custom exception handlers 2 * 3 * Copyright 2004-2009 Analog Devices Inc. 4 * 5 * Licensed under the GPL-2 or later 6 */ 7 8 #include <linux/module.h> 9 #include <asm/irq_handler.h> 10 bfin_request_exception(unsigned int exception,void (* handler)(void))11int bfin_request_exception(unsigned int exception, void (*handler)(void)) 12 { 13 void (*curr_handler)(void); 14 15 if (exception > 0x3F) 16 return -EINVAL; 17 18 curr_handler = ex_table[exception]; 19 20 if (curr_handler != ex_replaceable) 21 return -EBUSY; 22 23 ex_table[exception] = handler; 24 25 return 0; 26 } 27 EXPORT_SYMBOL(bfin_request_exception); 28 bfin_free_exception(unsigned int exception,void (* handler)(void))29int bfin_free_exception(unsigned int exception, void (*handler)(void)) 30 { 31 void (*curr_handler)(void); 32 33 if (exception > 0x3F) 34 return -EINVAL; 35 36 curr_handler = ex_table[exception]; 37 38 if (curr_handler != handler) 39 return -EBUSY; 40 41 ex_table[exception] = ex_replaceable; 42 43 return 0; 44 } 45 EXPORT_SYMBOL(bfin_free_exception); 46