root/include/linux/pm_wakeup.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. device_can_wakeup
  2. device_may_wakeup
  3. device_set_wakeup_path
  4. device_set_wakeup_capable
  5. device_can_wakeup
  6. wakeup_source_create
  7. wakeup_source_destroy
  8. wakeup_source_add
  9. wakeup_source_remove
  10. wakeup_source_register
  11. wakeup_source_unregister
  12. device_wakeup_enable
  13. device_wakeup_disable
  14. device_set_wakeup_enable
  15. device_init_wakeup
  16. device_may_wakeup
  17. device_set_wakeup_path
  18. __pm_stay_awake
  19. pm_stay_awake
  20. __pm_relax
  21. pm_relax
  22. pm_wakeup_ws_event
  23. pm_wakeup_dev_event
  24. __pm_wakeup_event
  25. pm_wakeup_event
  26. pm_wakeup_hard_event

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *  pm_wakeup.h - Power management wakeup interface
   4  *
   5  *  Copyright (C) 2008 Alan Stern
   6  *  Copyright (C) 2010 Rafael J. Wysocki, Novell Inc.
   7  */
   8 
   9 #ifndef _LINUX_PM_WAKEUP_H
  10 #define _LINUX_PM_WAKEUP_H
  11 
  12 #ifndef _DEVICE_H_
  13 # error "please don't include this file directly"
  14 #endif
  15 
  16 #include <linux/types.h>
  17 
  18 struct wake_irq;
  19 
  20 /**
  21  * struct wakeup_source - Representation of wakeup sources
  22  *
  23  * @name: Name of the wakeup source
  24  * @id: Wakeup source id
  25  * @entry: Wakeup source list entry
  26  * @lock: Wakeup source lock
  27  * @wakeirq: Optional device specific wakeirq
  28  * @timer: Wakeup timer list
  29  * @timer_expires: Wakeup timer expiration
  30  * @total_time: Total time this wakeup source has been active.
  31  * @max_time: Maximum time this wakeup source has been continuously active.
  32  * @last_time: Monotonic clock when the wakeup source's was touched last time.
  33  * @prevent_sleep_time: Total time this source has been preventing autosleep.
  34  * @event_count: Number of signaled wakeup events.
  35  * @active_count: Number of times the wakeup source was activated.
  36  * @relax_count: Number of times the wakeup source was deactivated.
  37  * @expire_count: Number of times the wakeup source's timeout has expired.
  38  * @wakeup_count: Number of times the wakeup source might abort suspend.
  39  * @dev: Struct device for sysfs statistics about the wakeup source.
  40  * @active: Status of the wakeup source.
  41  * @autosleep_enabled: Autosleep is active, so update @prevent_sleep_time.
  42  */
  43 struct wakeup_source {
  44         const char              *name;
  45         int                     id;
  46         struct list_head        entry;
  47         spinlock_t              lock;
  48         struct wake_irq         *wakeirq;
  49         struct timer_list       timer;
  50         unsigned long           timer_expires;
  51         ktime_t total_time;
  52         ktime_t max_time;
  53         ktime_t last_time;
  54         ktime_t start_prevent_time;
  55         ktime_t prevent_sleep_time;
  56         unsigned long           event_count;
  57         unsigned long           active_count;
  58         unsigned long           relax_count;
  59         unsigned long           expire_count;
  60         unsigned long           wakeup_count;
  61         struct device           *dev;
  62         bool                    active:1;
  63         bool                    autosleep_enabled:1;
  64 };
  65 
  66 #ifdef CONFIG_PM_SLEEP
  67 
  68 /*
  69  * Changes to device_may_wakeup take effect on the next pm state change.
  70  */
  71 
  72 static inline bool device_can_wakeup(struct device *dev)
  73 {
  74         return dev->power.can_wakeup;
  75 }
  76 
  77 static inline bool device_may_wakeup(struct device *dev)
  78 {
  79         return dev->power.can_wakeup && !!dev->power.wakeup;
  80 }
  81 
  82 static inline void device_set_wakeup_path(struct device *dev)
  83 {
  84         dev->power.wakeup_path = true;
  85 }
  86 
  87 /* drivers/base/power/wakeup.c */
  88 extern struct wakeup_source *wakeup_source_create(const char *name);
  89 extern void wakeup_source_destroy(struct wakeup_source *ws);
  90 extern void wakeup_source_add(struct wakeup_source *ws);
  91 extern void wakeup_source_remove(struct wakeup_source *ws);
  92 extern struct wakeup_source *wakeup_source_register(struct device *dev,
  93                                                     const char *name);
  94 extern void wakeup_source_unregister(struct wakeup_source *ws);
  95 extern int device_wakeup_enable(struct device *dev);
  96 extern int device_wakeup_disable(struct device *dev);
  97 extern void device_set_wakeup_capable(struct device *dev, bool capable);
  98 extern int device_init_wakeup(struct device *dev, bool val);
  99 extern int device_set_wakeup_enable(struct device *dev, bool enable);
 100 extern void __pm_stay_awake(struct wakeup_source *ws);
 101 extern void pm_stay_awake(struct device *dev);
 102 extern void __pm_relax(struct wakeup_source *ws);
 103 extern void pm_relax(struct device *dev);
 104 extern void pm_wakeup_ws_event(struct wakeup_source *ws, unsigned int msec, bool hard);
 105 extern void pm_wakeup_dev_event(struct device *dev, unsigned int msec, bool hard);
 106 
 107 #else /* !CONFIG_PM_SLEEP */
 108 
 109 static inline void device_set_wakeup_capable(struct device *dev, bool capable)
 110 {
 111         dev->power.can_wakeup = capable;
 112 }
 113 
 114 static inline bool device_can_wakeup(struct device *dev)
 115 {
 116         return dev->power.can_wakeup;
 117 }
 118 
 119 static inline struct wakeup_source *wakeup_source_create(const char *name)
 120 {
 121         return NULL;
 122 }
 123 
 124 static inline void wakeup_source_destroy(struct wakeup_source *ws) {}
 125 
 126 static inline void wakeup_source_add(struct wakeup_source *ws) {}
 127 
 128 static inline void wakeup_source_remove(struct wakeup_source *ws) {}
 129 
 130 static inline struct wakeup_source *wakeup_source_register(struct device *dev,
 131                                                            const char *name)
 132 {
 133         return NULL;
 134 }
 135 
 136 static inline void wakeup_source_unregister(struct wakeup_source *ws) {}
 137 
 138 static inline int device_wakeup_enable(struct device *dev)
 139 {
 140         dev->power.should_wakeup = true;
 141         return 0;
 142 }
 143 
 144 static inline int device_wakeup_disable(struct device *dev)
 145 {
 146         dev->power.should_wakeup = false;
 147         return 0;
 148 }
 149 
 150 static inline int device_set_wakeup_enable(struct device *dev, bool enable)
 151 {
 152         dev->power.should_wakeup = enable;
 153         return 0;
 154 }
 155 
 156 static inline int device_init_wakeup(struct device *dev, bool val)
 157 {
 158         device_set_wakeup_capable(dev, val);
 159         device_set_wakeup_enable(dev, val);
 160         return 0;
 161 }
 162 
 163 static inline bool device_may_wakeup(struct device *dev)
 164 {
 165         return dev->power.can_wakeup && dev->power.should_wakeup;
 166 }
 167 
 168 static inline void device_set_wakeup_path(struct device *dev) {}
 169 
 170 static inline void __pm_stay_awake(struct wakeup_source *ws) {}
 171 
 172 static inline void pm_stay_awake(struct device *dev) {}
 173 
 174 static inline void __pm_relax(struct wakeup_source *ws) {}
 175 
 176 static inline void pm_relax(struct device *dev) {}
 177 
 178 static inline void pm_wakeup_ws_event(struct wakeup_source *ws,
 179                                       unsigned int msec, bool hard) {}
 180 
 181 static inline void pm_wakeup_dev_event(struct device *dev, unsigned int msec,
 182                                        bool hard) {}
 183 
 184 #endif /* !CONFIG_PM_SLEEP */
 185 
 186 static inline void __pm_wakeup_event(struct wakeup_source *ws, unsigned int msec)
 187 {
 188         return pm_wakeup_ws_event(ws, msec, false);
 189 }
 190 
 191 static inline void pm_wakeup_event(struct device *dev, unsigned int msec)
 192 {
 193         return pm_wakeup_dev_event(dev, msec, false);
 194 }
 195 
 196 static inline void pm_wakeup_hard_event(struct device *dev)
 197 {
 198         return pm_wakeup_dev_event(dev, 0, true);
 199 }
 200 
 201 #endif /* _LINUX_PM_WAKEUP_H */

/* [<][>][^][v][top][bottom][index][help] */