14f86d3a8e297205780cca027e974fd5f81064780Len Brown/*
24f86d3a8e297205780cca027e974fd5f81064780Len Brown * cpuidle.h - The internal header file
34f86d3a8e297205780cca027e974fd5f81064780Len Brown */
44f86d3a8e297205780cca027e974fd5f81064780Len Brown
54f86d3a8e297205780cca027e974fd5f81064780Len Brown#ifndef __DRIVER_CPUIDLE_H
64f86d3a8e297205780cca027e974fd5f81064780Len Brown#define __DRIVER_CPUIDLE_H
74f86d3a8e297205780cca027e974fd5f81064780Len Brown
84f86d3a8e297205780cca027e974fd5f81064780Len Brown/* For internal use only */
94f86d3a8e297205780cca027e974fd5f81064780Len Brownextern struct cpuidle_governor *cpuidle_curr_governor;
104f86d3a8e297205780cca027e974fd5f81064780Len Brownextern struct list_head cpuidle_governors;
114f86d3a8e297205780cca027e974fd5f81064780Len Brownextern struct list_head cpuidle_detected_devices;
124f86d3a8e297205780cca027e974fd5f81064780Len Brownextern struct mutex cpuidle_lock;
134f86d3a8e297205780cca027e974fd5f81064780Len Brownextern spinlock_t cpuidle_driver_lock;
1462027aea23fcd14478abdddd3b74a4e0f5fb2984Len Brownextern int cpuidle_disabled(void);
1556cfbf74a17c40f3a741398103c9f5d5a6806715Colin Crossextern int cpuidle_enter_state(struct cpuidle_device *dev,
1656cfbf74a17c40f3a741398103c9f5d5a6806715Colin Cross		struct cpuidle_driver *drv, int next_state);
174f86d3a8e297205780cca027e974fd5f81064780Len Brown
184f86d3a8e297205780cca027e974fd5f81064780Len Brown/* idle loop */
194f86d3a8e297205780cca027e974fd5f81064780Len Brownextern void cpuidle_install_idle_handler(void);
204f86d3a8e297205780cca027e974fd5f81064780Len Brownextern void cpuidle_uninstall_idle_handler(void);
214f86d3a8e297205780cca027e974fd5f81064780Len Brown
224f86d3a8e297205780cca027e974fd5f81064780Len Brown/* governors */
234f86d3a8e297205780cca027e974fd5f81064780Len Brownextern int cpuidle_switch_governor(struct cpuidle_governor *gov);
244f86d3a8e297205780cca027e974fd5f81064780Len Brown
254f86d3a8e297205780cca027e974fd5f81064780Len Brown/* sysfs */
268f3e9953e1e4ae5c11e2e880e7d85c03c0180613Daniel Lezcano
278f3e9953e1e4ae5c11e2e880e7d85c03c0180613Daniel Lezcanostruct device;
288f3e9953e1e4ae5c11e2e880e7d85c03c0180613Daniel Lezcano
298a25a2fd126c621f44f3aeaef80d51f00fc11639Kay Sieversextern int cpuidle_add_interface(struct device *dev);
308a25a2fd126c621f44f3aeaef80d51f00fc11639Kay Sieversextern void cpuidle_remove_interface(struct device *dev);
31bf4d1b5ddb78f86078ac6ae0415802d5f0c68f92Daniel Lezcanoextern int cpuidle_add_device_sysfs(struct cpuidle_device *device);
32bf4d1b5ddb78f86078ac6ae0415802d5f0c68f92Daniel Lezcanoextern void cpuidle_remove_device_sysfs(struct cpuidle_device *device);
331aef40e288acfb3cc28ff77528b34ef66683bed6Daniel Lezcanoextern int cpuidle_add_sysfs(struct cpuidle_device *dev);
341aef40e288acfb3cc28ff77528b34ef66683bed6Daniel Lezcanoextern void cpuidle_remove_sysfs(struct cpuidle_device *dev);
354f86d3a8e297205780cca027e974fd5f81064780Len Brown
364126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED
374126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossbool cpuidle_state_is_coupled(struct cpuidle_device *dev,
384126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross		struct cpuidle_driver *drv, int state);
394126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossint cpuidle_enter_state_coupled(struct cpuidle_device *dev,
404126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross		struct cpuidle_driver *drv, int next_state);
414126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossint cpuidle_coupled_register_device(struct cpuidle_device *dev);
424126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossvoid cpuidle_coupled_unregister_device(struct cpuidle_device *dev);
434126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross#else
444126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossstatic inline bool cpuidle_state_is_coupled(struct cpuidle_device *dev,
454126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross		struct cpuidle_driver *drv, int state)
464126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross{
474126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross	return false;
484126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross}
494126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross
504126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossstatic inline int cpuidle_enter_state_coupled(struct cpuidle_device *dev,
514126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross		struct cpuidle_driver *drv, int next_state)
524126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross{
534126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross	return -1;
544126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross}
554126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross
564126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossstatic inline int cpuidle_coupled_register_device(struct cpuidle_device *dev)
574126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross{
584126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross	return 0;
594126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross}
604126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross
614126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Crossstatic inline void cpuidle_coupled_unregister_device(struct cpuidle_device *dev)
624126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross{
634126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross}
644126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross#endif
654126c0197bc8c58a0bb7fcda07b01b596b6fb4c5Colin Cross
664f86d3a8e297205780cca027e974fd5f81064780Len Brown#endif /* __DRIVER_CPUIDLE_H */
67