Blame view

include/linux/pm_wakeup.h 5.03 KB
9a3df1f7d   Alan Stern   PM: Convert wakeu...
1
2
3
4
  /*
   *  pm_wakeup.h - Power management wakeup interface
   *
   *  Copyright (C) 2008 Alan Stern
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
5
   *  Copyright (C) 2010 Rafael J. Wysocki, Novell Inc.
9a3df1f7d   Alan Stern   PM: Convert wakeu...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   *
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation; either version 2 of the License, or
   *  (at your option) any later version.
   *
   *  This program is distributed in the hope that it will be useful,
   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *  GNU General Public License for more details.
   *
   *  You should have received a copy of the GNU General Public License
   *  along with this program; if not, write to the Free Software
   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   */
  
  #ifndef _LINUX_PM_WAKEUP_H
  #define _LINUX_PM_WAKEUP_H
  
  #ifndef _DEVICE_H_
  # error "please don't include this file directly"
  #endif
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
28
  #include <linux/types.h>
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
29
30
  /**
   * struct wakeup_source - Representation of wakeup sources
2430d12c9   Alan Stern   PM: describe kern...
31
   *
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
32
33
34
35
36
37
38
39
   * @total_time: Total time this wakeup source has been active.
   * @max_time: Maximum time this wakeup source has been continuously active.
   * @last_time: Monotonic clock when the wakeup source's was activated last time.
   * @event_count: Number of signaled wakeup events.
   * @active_count: Number of times the wakeup sorce was activated.
   * @relax_count: Number of times the wakeup sorce was deactivated.
   * @hit_count: Number of times the wakeup sorce might abort system suspend.
   * @active: Status of the wakeup source.
9a3df1f7d   Alan Stern   PM: Convert wakeu...
40
   */
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  struct wakeup_source {
  	char 			*name;
  	struct list_head	entry;
  	spinlock_t		lock;
  	struct timer_list	timer;
  	unsigned long		timer_expires;
  	ktime_t total_time;
  	ktime_t max_time;
  	ktime_t last_time;
  	unsigned long		event_count;
  	unsigned long		active_count;
  	unsigned long		relax_count;
  	unsigned long		hit_count;
  	unsigned int		active:1;
  };
  
  #ifdef CONFIG_PM_SLEEP
  
  /*
   * Changes to device_may_wakeup take effect on the next pm state change.
   */
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
62
63
64
65
  static inline bool device_can_wakeup(struct device *dev)
  {
  	return dev->power.can_wakeup;
  }
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
66
  static inline bool device_may_wakeup(struct device *dev)
9a3df1f7d   Alan Stern   PM: Convert wakeu...
67
  {
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
68
  	return dev->power.can_wakeup && !!dev->power.wakeup;
9a3df1f7d   Alan Stern   PM: Convert wakeu...
69
  }
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
70
71
72
73
74
75
76
77
78
  /* drivers/base/power/wakeup.c */
  extern struct wakeup_source *wakeup_source_create(const char *name);
  extern void wakeup_source_destroy(struct wakeup_source *ws);
  extern void wakeup_source_add(struct wakeup_source *ws);
  extern void wakeup_source_remove(struct wakeup_source *ws);
  extern struct wakeup_source *wakeup_source_register(const char *name);
  extern void wakeup_source_unregister(struct wakeup_source *ws);
  extern int device_wakeup_enable(struct device *dev);
  extern int device_wakeup_disable(struct device *dev);
cb8f51bda   Rafael J. Wysocki   PM: Do not create...
79
  extern void device_set_wakeup_capable(struct device *dev, bool capable);
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
80
81
82
83
84
85
86
87
88
89
  extern int device_init_wakeup(struct device *dev, bool val);
  extern int device_set_wakeup_enable(struct device *dev, bool enable);
  extern void __pm_stay_awake(struct wakeup_source *ws);
  extern void pm_stay_awake(struct device *dev);
  extern void __pm_relax(struct wakeup_source *ws);
  extern void pm_relax(struct device *dev);
  extern void __pm_wakeup_event(struct wakeup_source *ws, unsigned int msec);
  extern void pm_wakeup_event(struct device *dev, unsigned int msec);
  
  #else /* !CONFIG_PM_SLEEP */
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
90
  static inline void device_set_wakeup_capable(struct device *dev, bool capable)
eb9d0fe40   Rafael J. Wysocki   PCI ACPI: Rework ...
91
  {
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
92
  	dev->power.can_wakeup = capable;
eb9d0fe40   Rafael J. Wysocki   PCI ACPI: Rework ...
93
  }
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
94
  static inline bool device_can_wakeup(struct device *dev)
9a3df1f7d   Alan Stern   PM: Convert wakeu...
95
96
97
  {
  	return dev->power.can_wakeup;
  }
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
98
  static inline struct wakeup_source *wakeup_source_create(const char *name)
9a3df1f7d   Alan Stern   PM: Convert wakeu...
99
  {
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
100
  	return NULL;
9a3df1f7d   Alan Stern   PM: Convert wakeu...
101
  }
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
102
103
104
  static inline void wakeup_source_destroy(struct wakeup_source *ws) {}
  
  static inline void wakeup_source_add(struct wakeup_source *ws) {}
9a3df1f7d   Alan Stern   PM: Convert wakeu...
105

074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
106
107
108
  static inline void wakeup_source_remove(struct wakeup_source *ws) {}
  
  static inline struct wakeup_source *wakeup_source_register(const char *name)
9a3df1f7d   Alan Stern   PM: Convert wakeu...
109
  {
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
110
  	return NULL;
9a3df1f7d   Alan Stern   PM: Convert wakeu...
111
  }
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
112
113
114
  static inline void wakeup_source_unregister(struct wakeup_source *ws) {}
  
  static inline int device_wakeup_enable(struct device *dev)
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
115
  {
805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
116
117
  	dev->power.should_wakeup = true;
  	return 0;
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
118
  }
c300bd2fb   Stephen Rothwell   PCI: include linu...
119

074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
120
  static inline int device_wakeup_disable(struct device *dev)
9a3df1f7d   Alan Stern   PM: Convert wakeu...
121
  {
805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
122
  	dev->power.should_wakeup = false;
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
123
  	return 0;
9a3df1f7d   Alan Stern   PM: Convert wakeu...
124
  }
805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
125
  static inline int device_set_wakeup_enable(struct device *dev, bool enable)
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
126
  {
805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
127
128
  	dev->power.should_wakeup = enable;
  	return 0;
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
129
  }
805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
130
131
132
133
134
135
  static inline int device_init_wakeup(struct device *dev, bool val)
  {
  	device_set_wakeup_capable(dev, val);
  	device_set_wakeup_enable(dev, val);
  	return 0;
  }
074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
136

805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
137
  static inline bool device_may_wakeup(struct device *dev)
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
138
  {
805bdaec1   Rafael J. Wysocki   PM: Make ACPI wak...
139
  	return dev->power.can_wakeup && dev->power.should_wakeup;
228c54ef7   Dmitry Torokhov   PM: pm_wakeup - s...
140
  }
9a3df1f7d   Alan Stern   PM: Convert wakeu...
141

074037ec7   Rafael J. Wysocki   PM / Wakeup: Intr...
142
143
144
145
146
147
148
149
150
151
152
153
154
  static inline void __pm_stay_awake(struct wakeup_source *ws) {}
  
  static inline void pm_stay_awake(struct device *dev) {}
  
  static inline void __pm_relax(struct wakeup_source *ws) {}
  
  static inline void pm_relax(struct device *dev) {}
  
  static inline void __pm_wakeup_event(struct wakeup_source *ws, unsigned int msec) {}
  
  static inline void pm_wakeup_event(struct device *dev, unsigned int msec) {}
  
  #endif /* !CONFIG_PM_SLEEP */
9a3df1f7d   Alan Stern   PM: Convert wakeu...
155
156
  
  #endif /* _LINUX_PM_WAKEUP_H */