xref: /openbmc/linux/drivers/cpuidle/cpuidle.h (revision bf6479db)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
24f86d3a8SLen Brown /*
34f86d3a8SLen Brown  * cpuidle.h - The internal header file
44f86d3a8SLen Brown  */
54f86d3a8SLen Brown 
64f86d3a8SLen Brown #ifndef __DRIVER_CPUIDLE_H
74f86d3a8SLen Brown #define __DRIVER_CPUIDLE_H
84f86d3a8SLen Brown 
94f86d3a8SLen Brown /* For internal use only */
1061cb5758SRafael J. Wysocki extern char param_governor[];
114f86d3a8SLen Brown extern struct cpuidle_governor *cpuidle_curr_governor;
12cb5d8c45SJoao Martins extern struct cpuidle_governor *cpuidle_prev_governor;
134f86d3a8SLen Brown extern struct list_head cpuidle_governors;
144f86d3a8SLen Brown extern struct list_head cpuidle_detected_devices;
154f86d3a8SLen Brown extern struct mutex cpuidle_lock;
164f86d3a8SLen Brown extern spinlock_t cpuidle_driver_lock;
1762027aeaSLen Brown extern int cpuidle_disabled(void);
1856cfbf74SColin Cross extern int cpuidle_enter_state(struct cpuidle_device *dev,
1956cfbf74SColin Cross 		struct cpuidle_driver *drv, int next_state);
204f86d3a8SLen Brown 
214f86d3a8SLen Brown /* idle loop */
224f86d3a8SLen Brown extern void cpuidle_install_idle_handler(void);
234f86d3a8SLen Brown extern void cpuidle_uninstall_idle_handler(void);
244f86d3a8SLen Brown 
254f86d3a8SLen Brown /* governors */
26cb5d8c45SJoao Martins extern struct cpuidle_governor *cpuidle_find_governor(const char *str);
274f86d3a8SLen Brown extern int cpuidle_switch_governor(struct cpuidle_governor *gov);
284f86d3a8SLen Brown 
294f86d3a8SLen Brown /* sysfs */
308f3e9953SDaniel Lezcano 
318f3e9953SDaniel Lezcano struct device;
328f3e9953SDaniel Lezcano 
33*bf6479dbSGreg Kroah-Hartman extern int cpuidle_add_interface(void);
348a25a2fdSKay Sievers extern void cpuidle_remove_interface(struct device *dev);
35bf4d1b5dSDaniel Lezcano extern int cpuidle_add_device_sysfs(struct cpuidle_device *device);
36bf4d1b5dSDaniel Lezcano extern void cpuidle_remove_device_sysfs(struct cpuidle_device *device);
371aef40e2SDaniel Lezcano extern int cpuidle_add_sysfs(struct cpuidle_device *dev);
381aef40e2SDaniel Lezcano extern void cpuidle_remove_sysfs(struct cpuidle_device *dev);
394f86d3a8SLen Brown 
404126c019SColin Cross #ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED
414c1ed5a6SXunlei Pang bool cpuidle_state_is_coupled(struct cpuidle_driver *drv, int state);
42abceaa9cSXunlei Pang int cpuidle_coupled_state_verify(struct cpuidle_driver *drv);
434126c019SColin Cross int cpuidle_enter_state_coupled(struct cpuidle_device *dev,
444126c019SColin Cross 		struct cpuidle_driver *drv, int next_state);
454126c019SColin Cross int cpuidle_coupled_register_device(struct cpuidle_device *dev);
464126c019SColin Cross void cpuidle_coupled_unregister_device(struct cpuidle_device *dev);
474126c019SColin Cross #else
484c1ed5a6SXunlei Pang static inline
cpuidle_state_is_coupled(struct cpuidle_driver * drv,int state)494c1ed5a6SXunlei Pang bool cpuidle_state_is_coupled(struct cpuidle_driver *drv, int state)
504126c019SColin Cross {
514126c019SColin Cross 	return false;
524126c019SColin Cross }
534126c019SColin Cross 
cpuidle_coupled_state_verify(struct cpuidle_driver * drv)54abceaa9cSXunlei Pang static inline int cpuidle_coupled_state_verify(struct cpuidle_driver *drv)
55abceaa9cSXunlei Pang {
56abceaa9cSXunlei Pang 	return 0;
57abceaa9cSXunlei Pang }
58abceaa9cSXunlei Pang 
cpuidle_enter_state_coupled(struct cpuidle_device * dev,struct cpuidle_driver * drv,int next_state)594126c019SColin Cross static inline int cpuidle_enter_state_coupled(struct cpuidle_device *dev,
604126c019SColin Cross 		struct cpuidle_driver *drv, int next_state)
614126c019SColin Cross {
624126c019SColin Cross 	return -1;
634126c019SColin Cross }
644126c019SColin Cross 
cpuidle_coupled_register_device(struct cpuidle_device * dev)654126c019SColin Cross static inline int cpuidle_coupled_register_device(struct cpuidle_device *dev)
664126c019SColin Cross {
674126c019SColin Cross 	return 0;
684126c019SColin Cross }
694126c019SColin Cross 
cpuidle_coupled_unregister_device(struct cpuidle_device * dev)704126c019SColin Cross static inline void cpuidle_coupled_unregister_device(struct cpuidle_device *dev)
714126c019SColin Cross {
724126c019SColin Cross }
734126c019SColin Cross #endif
744126c019SColin Cross 
754f86d3a8SLen Brown #endif /* __DRIVER_CPUIDLE_H */
76