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 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} 27EXPORT_SYMBOL(bfin_request_exception); 28 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} 45EXPORT_SYMBOL(bfin_free_exception); 46