1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * cpuidle.h - The internal header file 4 */ 5 6 #ifndef __DRIVER_CPUIDLE_H 7 #define __DRIVER_CPUIDLE_H 8 9 /* For internal use only */ 10 extern char param_governor[]; 11 extern struct cpuidle_governor *cpuidle_curr_governor; 12 extern struct cpuidle_governor *cpuidle_prev_governor; 13 extern struct list_head cpuidle_governors; 14 extern struct list_head cpuidle_detected_devices; 15 extern struct mutex cpuidle_lock; 16 extern spinlock_t cpuidle_driver_lock; 17 extern int cpuidle_disabled(void); 18 extern int cpuidle_enter_state(struct cpuidle_device *dev, 19 struct cpuidle_driver *drv, int next_state); 20 21 /* idle loop */ 22 extern void cpuidle_install_idle_handler(void); 23 extern void cpuidle_uninstall_idle_handler(void); 24 25 /* governors */ 26 extern struct cpuidle_governor *cpuidle_find_governor(const char *str); 27 extern int cpuidle_switch_governor(struct cpuidle_governor *gov); 28 29 /* sysfs */ 30 31 struct device; 32 33 extern int cpuidle_add_interface(struct device *dev); 34 extern void cpuidle_remove_interface(struct device *dev); 35 extern int cpuidle_add_device_sysfs(struct cpuidle_device *device); 36 extern void cpuidle_remove_device_sysfs(struct cpuidle_device *device); 37 extern int cpuidle_add_sysfs(struct cpuidle_device *dev); 38 extern void cpuidle_remove_sysfs(struct cpuidle_device *dev); 39 40 #ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED 41 bool cpuidle_state_is_coupled(struct cpuidle_driver *drv, int state); 42 int cpuidle_coupled_state_verify(struct cpuidle_driver *drv); 43 int cpuidle_enter_state_coupled(struct cpuidle_device *dev, 44 struct cpuidle_driver *drv, int next_state); 45 int cpuidle_coupled_register_device(struct cpuidle_device *dev); 46 void cpuidle_coupled_unregister_device(struct cpuidle_device *dev); 47 #else 48 static inline 49 bool cpuidle_state_is_coupled(struct cpuidle_driver *drv, int state) 50 { 51 return false; 52 } 53 54 static inline int cpuidle_coupled_state_verify(struct cpuidle_driver *drv) 55 { 56 return 0; 57 } 58 59 static inline int cpuidle_enter_state_coupled(struct cpuidle_device *dev, 60 struct cpuidle_driver *drv, int next_state) 61 { 62 return -1; 63 } 64 65 static inline int cpuidle_coupled_register_device(struct cpuidle_device *dev) 66 { 67 return 0; 68 } 69 70 static inline void cpuidle_coupled_unregister_device(struct cpuidle_device *dev) 71 { 72 } 73 #endif 74 75 #endif /* __DRIVER_CPUIDLE_H */ 76