| /* 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); |