46 lines
		
	
	
	
		
			859 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
	
		
			859 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* 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); |