Commit | Line | Data |
---|---|---|
1c33be57 NP |
1 | /* |
2 | * arch/arm/include/asm/bL_switcher.h | |
3 | * | |
4 | * Created by: Nicolas Pitre, April 2012 | |
5 | * Copyright: (C) 2012-2013 Linaro Limited | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License version 2 as | |
9 | * published by the Free Software Foundation. | |
10 | */ | |
11 | ||
12 | #ifndef ASM_BL_SWITCHER_H | |
13 | #define ASM_BL_SWITCHER_H | |
14 | ||
491990e2 DM |
15 | #include <linux/compiler.h> |
16 | #include <linux/types.h> | |
17 | ||
0577fee2 DM |
18 | typedef void (*bL_switch_completion_handler)(void *cookie); |
19 | ||
20 | int bL_switch_request_cb(unsigned int cpu, unsigned int new_cluster_id, | |
21 | bL_switch_completion_handler completer, | |
22 | void *completer_cookie); | |
23 | static inline int bL_switch_request(unsigned int cpu, unsigned int new_cluster_id) | |
24 | { | |
25 | return bL_switch_request_cb(cpu, new_cluster_id, NULL, NULL); | |
26 | } | |
1c33be57 | 27 | |
491990e2 DM |
28 | /* |
29 | * Register here to be notified about runtime enabling/disabling of | |
30 | * the switcher. | |
31 | * | |
32 | * The notifier chain is called with the switcher activation lock held: | |
33 | * the switcher will not be enabled or disabled during callbacks. | |
34 | * Callbacks must not call bL_switcher_{get,put}_enabled(). | |
35 | */ | |
36 | #define BL_NOTIFY_PRE_ENABLE 0 | |
37 | #define BL_NOTIFY_POST_ENABLE 1 | |
38 | #define BL_NOTIFY_PRE_DISABLE 2 | |
39 | #define BL_NOTIFY_POST_DISABLE 3 | |
40 | ||
41 | #ifdef CONFIG_BL_SWITCHER | |
42 | ||
43 | int bL_switcher_register_notifier(struct notifier_block *nb); | |
44 | int bL_switcher_unregister_notifier(struct notifier_block *nb); | |
45 | ||
46 | /* | |
47 | * Use these functions to temporarily prevent enabling/disabling of | |
48 | * the switcher. | |
49 | * bL_switcher_get_enabled() returns true if the switcher is currently | |
50 | * enabled. Each call to bL_switcher_get_enabled() must be followed | |
51 | * by a call to bL_switcher_put_enabled(). These functions are not | |
52 | * recursive. | |
53 | */ | |
c0f43751 DM |
54 | bool bL_switcher_get_enabled(void); |
55 | void bL_switcher_put_enabled(void); | |
56 | ||
29064b88 | 57 | int bL_switcher_trace_trigger(void); |
d08e2e09 | 58 | int bL_switcher_get_logical_index(u32 mpidr); |
29064b88 | 59 | |
491990e2 DM |
60 | #else |
61 | static inline int bL_switcher_register_notifier(struct notifier_block *nb) | |
62 | { | |
63 | return 0; | |
64 | } | |
65 | ||
66 | static inline int bL_switcher_unregister_notifier(struct notifier_block *nb) | |
67 | { | |
68 | return 0; | |
69 | } | |
70 | ||
71 | static inline bool bL_switcher_get_enabled(void) { return false; } | |
72 | static inline void bL_switcher_put_enabled(void) { } | |
29064b88 | 73 | static inline int bL_switcher_trace_trigger(void) { return 0; } |
d08e2e09 | 74 | static inline int bL_switcher_get_logical_index(u32 mpidr) { return -EUNATCH; } |
491990e2 DM |
75 | #endif /* CONFIG_BL_SWITCHER */ |
76 | ||
1c33be57 | 77 | #endif |