Commit | Line | Data |
---|---|---|
2a12c463 RG |
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); |