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