LCOV - code coverage report
Current view: top level - include/linux - pm_runtime.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 2 0.0 %
Date: 2014-02-18 Functions: 0 2 0.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * pm_runtime.h - Device run-time power management helper functions.
       3                 :            :  *
       4                 :            :  * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl>
       5                 :            :  *
       6                 :            :  * This file is released under the GPLv2.
       7                 :            :  */
       8                 :            : 
       9                 :            : #ifndef _LINUX_PM_RUNTIME_H
      10                 :            : #define _LINUX_PM_RUNTIME_H
      11                 :            : 
      12                 :            : #include <linux/device.h>
      13                 :            : #include <linux/notifier.h>
      14                 :            : #include <linux/pm.h>
      15                 :            : 
      16                 :            : #include <linux/jiffies.h>
      17                 :            : 
      18                 :            : /* Runtime PM flag argument bits */
      19                 :            : #define RPM_ASYNC               0x01    /* Request is asynchronous */
      20                 :            : #define RPM_NOWAIT              0x02    /* Don't wait for concurrent
      21                 :            :                                             state change */
      22                 :            : #define RPM_GET_PUT             0x04    /* Increment/decrement the
      23                 :            :                                             usage_count */
      24                 :            : #define RPM_AUTO                0x08    /* Use autosuspend_delay */
      25                 :            : 
      26                 :            : #ifdef CONFIG_PM_RUNTIME
      27                 :            : 
      28                 :            : extern struct workqueue_struct *pm_wq;
      29                 :            : 
      30                 :            : extern int __pm_runtime_idle(struct device *dev, int rpmflags);
      31                 :            : extern int __pm_runtime_suspend(struct device *dev, int rpmflags);
      32                 :            : extern int __pm_runtime_resume(struct device *dev, int rpmflags);
      33                 :            : extern int pm_schedule_suspend(struct device *dev, unsigned int delay);
      34                 :            : extern int __pm_runtime_set_status(struct device *dev, unsigned int status);
      35                 :            : extern int pm_runtime_barrier(struct device *dev);
      36                 :            : extern void pm_runtime_enable(struct device *dev);
      37                 :            : extern void __pm_runtime_disable(struct device *dev, bool check_resume);
      38                 :            : extern void pm_runtime_allow(struct device *dev);
      39                 :            : extern void pm_runtime_forbid(struct device *dev);
      40                 :            : extern int pm_generic_runtime_suspend(struct device *dev);
      41                 :            : extern int pm_generic_runtime_resume(struct device *dev);
      42                 :            : extern void pm_runtime_no_callbacks(struct device *dev);
      43                 :            : extern void pm_runtime_irq_safe(struct device *dev);
      44                 :            : extern void __pm_runtime_use_autosuspend(struct device *dev, bool use);
      45                 :            : extern void pm_runtime_set_autosuspend_delay(struct device *dev, int delay);
      46                 :            : extern unsigned long pm_runtime_autosuspend_expiration(struct device *dev);
      47                 :            : extern void pm_runtime_update_max_time_suspended(struct device *dev,
      48                 :            :                                                  s64 delta_ns);
      49                 :            : extern void pm_runtime_set_memalloc_noio(struct device *dev, bool enable);
      50                 :            : 
      51                 :            : static inline bool pm_children_suspended(struct device *dev)
      52                 :            : {
      53                 :            :         return dev->power.ignore_children
      54                 :            :                 || !atomic_read(&dev->power.child_count);
      55                 :            : }
      56                 :            : 
      57                 :            : static inline void pm_runtime_get_noresume(struct device *dev)
      58                 :            : {
      59                 :            :         atomic_inc(&dev->power.usage_count);
      60                 :            : }
      61                 :            : 
      62                 :            : static inline void pm_runtime_put_noidle(struct device *dev)
      63                 :            : {
      64                 :            :         atomic_add_unless(&dev->power.usage_count, -1, 0);
      65                 :            : }
      66                 :            : 
      67                 :            : static inline bool device_run_wake(struct device *dev)
      68                 :            : {
      69                 :            :         return dev->power.run_wake;
      70                 :            : }
      71                 :            : 
      72                 :            : static inline void device_set_run_wake(struct device *dev, bool enable)
      73                 :            : {
      74                 :            :         dev->power.run_wake = enable;
      75                 :            : }
      76                 :            : 
      77                 :            : static inline bool pm_runtime_suspended(struct device *dev)
      78                 :            : {
      79                 :            :         return dev->power.runtime_status == RPM_SUSPENDED
      80                 :            :                 && !dev->power.disable_depth;
      81                 :            : }
      82                 :            : 
      83                 :            : static inline bool pm_runtime_active(struct device *dev)
      84                 :            : {
      85                 :            :         return dev->power.runtime_status == RPM_ACTIVE
      86                 :            :                 || dev->power.disable_depth;
      87                 :            : }
      88                 :            : 
      89                 :            : static inline bool pm_runtime_status_suspended(struct device *dev)
      90                 :            : {
      91                 :            :         return dev->power.runtime_status == RPM_SUSPENDED;
      92                 :            : }
      93                 :            : 
      94                 :            : static inline bool pm_runtime_enabled(struct device *dev)
      95                 :            : {
      96                 :            :         return !dev->power.disable_depth;
      97                 :            : }
      98                 :            : 
      99                 :            : static inline bool pm_runtime_callbacks_present(struct device *dev)
     100                 :            : {
     101                 :            :         return !dev->power.no_callbacks;
     102                 :            : }
     103                 :            : 
     104                 :            : static inline void pm_runtime_mark_last_busy(struct device *dev)
     105                 :            : {
     106                 :            :         ACCESS_ONCE(dev->power.last_busy) = jiffies;
     107                 :            : }
     108                 :            : 
     109                 :            : #else /* !CONFIG_PM_RUNTIME */
     110                 :            : 
     111                 :            : static inline int __pm_runtime_idle(struct device *dev, int rpmflags)
     112                 :            : {
     113                 :            :         return -ENOSYS;
     114                 :            : }
     115                 :            : static inline int __pm_runtime_suspend(struct device *dev, int rpmflags)
     116                 :            : {
     117                 :            :         return -ENOSYS;
     118                 :            : }
     119                 :            : static inline int __pm_runtime_resume(struct device *dev, int rpmflags)
     120                 :            : {
     121                 :            :         return 1;
     122                 :            : }
     123                 :            : static inline int pm_schedule_suspend(struct device *dev, unsigned int delay)
     124                 :            : {
     125                 :            :         return -ENOSYS;
     126                 :            : }
     127                 :            : static inline int __pm_runtime_set_status(struct device *dev,
     128                 :            :                                             unsigned int status) { return 0; }
     129                 :            : static inline int pm_runtime_barrier(struct device *dev) { return 0; }
     130                 :            : static inline void pm_runtime_enable(struct device *dev) {}
     131                 :            : static inline void __pm_runtime_disable(struct device *dev, bool c) {}
     132                 :            : static inline void pm_runtime_allow(struct device *dev) {}
     133                 :            : static inline void pm_runtime_forbid(struct device *dev) {}
     134                 :            : 
     135                 :            : static inline bool pm_children_suspended(struct device *dev) { return false; }
     136                 :            : static inline void pm_runtime_get_noresume(struct device *dev) {}
     137                 :            : static inline void pm_runtime_put_noidle(struct device *dev) {}
     138                 :            : static inline bool device_run_wake(struct device *dev) { return false; }
     139                 :            : static inline void device_set_run_wake(struct device *dev, bool enable) {}
     140                 :            : static inline bool pm_runtime_suspended(struct device *dev) { return false; }
     141                 :            : static inline bool pm_runtime_active(struct device *dev) { return true; }
     142                 :            : static inline bool pm_runtime_status_suspended(struct device *dev) { return false; }
     143                 :            : static inline bool pm_runtime_enabled(struct device *dev) { return false; }
     144                 :            : 
     145                 :          0 : static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; }
     146                 :          0 : static inline int pm_generic_runtime_resume(struct device *dev) { return 0; }
     147                 :            : static inline void pm_runtime_no_callbacks(struct device *dev) {}
     148                 :            : static inline void pm_runtime_irq_safe(struct device *dev) {}
     149                 :            : 
     150                 :            : static inline bool pm_runtime_callbacks_present(struct device *dev) { return false; }
     151                 :            : static inline void pm_runtime_mark_last_busy(struct device *dev) {}
     152                 :            : static inline void __pm_runtime_use_autosuspend(struct device *dev,
     153                 :            :                                                 bool use) {}
     154                 :            : static inline void pm_runtime_set_autosuspend_delay(struct device *dev,
     155                 :            :                                                 int delay) {}
     156                 :            : static inline unsigned long pm_runtime_autosuspend_expiration(
     157                 :            :                                 struct device *dev) { return 0; }
     158                 :            : static inline void pm_runtime_set_memalloc_noio(struct device *dev,
     159                 :            :                                                 bool enable){}
     160                 :            : 
     161                 :            : #endif /* !CONFIG_PM_RUNTIME */
     162                 :            : 
     163                 :            : static inline int pm_runtime_idle(struct device *dev)
     164                 :            : {
     165                 :            :         return __pm_runtime_idle(dev, 0);
     166                 :            : }
     167                 :            : 
     168                 :            : static inline int pm_runtime_suspend(struct device *dev)
     169                 :            : {
     170                 :            :         return __pm_runtime_suspend(dev, 0);
     171                 :            : }
     172                 :            : 
     173                 :            : static inline int pm_runtime_autosuspend(struct device *dev)
     174                 :            : {
     175                 :            :         return __pm_runtime_suspend(dev, RPM_AUTO);
     176                 :            : }
     177                 :            : 
     178                 :            : static inline int pm_runtime_resume(struct device *dev)
     179                 :            : {
     180                 :            :         return __pm_runtime_resume(dev, 0);
     181                 :            : }
     182                 :            : 
     183                 :            : static inline int pm_request_idle(struct device *dev)
     184                 :            : {
     185                 :            :         return __pm_runtime_idle(dev, RPM_ASYNC);
     186                 :            : }
     187                 :            : 
     188                 :            : static inline int pm_request_resume(struct device *dev)
     189                 :            : {
     190                 :            :         return __pm_runtime_resume(dev, RPM_ASYNC);
     191                 :            : }
     192                 :            : 
     193                 :            : static inline int pm_request_autosuspend(struct device *dev)
     194                 :            : {
     195                 :            :         return __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO);
     196                 :            : }
     197                 :            : 
     198                 :            : static inline int pm_runtime_get(struct device *dev)
     199                 :            : {
     200                 :            :         return __pm_runtime_resume(dev, RPM_GET_PUT | RPM_ASYNC);
     201                 :            : }
     202                 :            : 
     203                 :            : static inline int pm_runtime_get_sync(struct device *dev)
     204                 :            : {
     205                 :            :         return __pm_runtime_resume(dev, RPM_GET_PUT);
     206                 :            : }
     207                 :            : 
     208                 :            : static inline int pm_runtime_put(struct device *dev)
     209                 :            : {
     210                 :            :         return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC);
     211                 :            : }
     212                 :            : 
     213                 :            : static inline int pm_runtime_put_autosuspend(struct device *dev)
     214                 :            : {
     215                 :            :         return __pm_runtime_suspend(dev,
     216                 :            :             RPM_GET_PUT | RPM_ASYNC | RPM_AUTO);
     217                 :            : }
     218                 :            : 
     219                 :            : static inline int pm_runtime_put_sync(struct device *dev)
     220                 :            : {
     221                 :            :         return __pm_runtime_idle(dev, RPM_GET_PUT);
     222                 :            : }
     223                 :            : 
     224                 :            : static inline int pm_runtime_put_sync_suspend(struct device *dev)
     225                 :            : {
     226                 :            :         return __pm_runtime_suspend(dev, RPM_GET_PUT);
     227                 :            : }
     228                 :            : 
     229                 :            : static inline int pm_runtime_put_sync_autosuspend(struct device *dev)
     230                 :            : {
     231                 :            :         return __pm_runtime_suspend(dev, RPM_GET_PUT | RPM_AUTO);
     232                 :            : }
     233                 :            : 
     234                 :            : static inline int pm_runtime_set_active(struct device *dev)
     235                 :            : {
     236                 :            :         return __pm_runtime_set_status(dev, RPM_ACTIVE);
     237                 :            : }
     238                 :            : 
     239                 :            : static inline void pm_runtime_set_suspended(struct device *dev)
     240                 :            : {
     241                 :            :         __pm_runtime_set_status(dev, RPM_SUSPENDED);
     242                 :            : }
     243                 :            : 
     244                 :            : static inline void pm_runtime_disable(struct device *dev)
     245                 :            : {
     246                 :            :         __pm_runtime_disable(dev, true);
     247                 :            : }
     248                 :            : 
     249                 :            : static inline void pm_runtime_use_autosuspend(struct device *dev)
     250                 :            : {
     251                 :            :         __pm_runtime_use_autosuspend(dev, true);
     252                 :            : }
     253                 :            : 
     254                 :            : static inline void pm_runtime_dont_use_autosuspend(struct device *dev)
     255                 :            : {
     256                 :            :         __pm_runtime_use_autosuspend(dev, false);
     257                 :            : }
     258                 :            : 
     259                 :            : #endif

Generated by: LCOV version 1.9