| Robin Getz | 2a12c46 | 2010-03-11 16:24:18 +0000 | [diff] [blame] | 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 |  | 
 | 11 | int 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 |  | 
 | 29 | int 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); |