summaryrefslogtreecommitdiff
path: root/include/linux/android_alarm.h
diff options
context:
space:
mode:
authorArve Hjønnevåg <arve@android.com>2009-05-04 14:09:15 -0700
committerColin Cross <ccross@android.com>2010-09-29 17:49:08 -0700
commitc4606c120818603260362b3440a60d46e7feb44e (patch)
tree5f8e90bb855c3f31a81d0b239c9b4c77c5cb680a /include/linux/android_alarm.h
parente5642795c4c75493a255f27646d784cd70f4ef70 (diff)
rtc: alarm: Add in-kernel alarm interface
Drivers can now create alarms that will use an hrtimer while the system is running and the rtc to wake up from suspend. Signed-off-by: Arve Hjønnevåg <arve@android.com>
Diffstat (limited to 'include/linux/android_alarm.h')
-rw-r--r--include/linux/android_alarm.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/include/linux/android_alarm.h b/include/linux/android_alarm.h
index d0cafd637199..f8f14e793dbf 100644
--- a/include/linux/android_alarm.h
+++ b/include/linux/android_alarm.h
@@ -33,6 +33,50 @@ enum android_alarm_type {
/* ANDROID_ALARM_TIME_CHANGE = 16 */
};
+#ifdef __KERNEL__
+
+#include <linux/ktime.h>
+#include <linux/rbtree.h>
+
+/*
+ * The alarm interface is similar to the hrtimer interface but adds support
+ * for wakeup from suspend. It also adds an elapsed realtime clock that can
+ * be used for periodic timers that need to keep runing while the system is
+ * suspended and not be disrupted when the wall time is set.
+ */
+
+/**
+ * struct alarm - the basic alarm structure
+ * @node: red black tree node for time ordered insertion
+ * @type: alarm type. rtc/elapsed-realtime/systemtime, wakeup/non-wakeup.
+ * @softexpires: the absolute earliest expiry time of the alarm.
+ * @expires: the absolute expiry time.
+ * @function: alarm expiry callback function
+ *
+ * The alarm structure must be initialized by alarm_init()
+ *
+ */
+
+struct alarm {
+ struct rb_node node;
+ enum android_alarm_type type;
+ ktime_t softexpires;
+ ktime_t expires;
+ void (*function)(struct alarm *);
+};
+
+void alarm_init(struct alarm *alarm,
+ enum android_alarm_type type, void (*function)(struct alarm *));
+void alarm_start_range(struct alarm *alarm, ktime_t start, ktime_t end);
+int alarm_try_to_cancel(struct alarm *alarm);
+int alarm_cancel(struct alarm *alarm);
+ktime_t alarm_get_elapsed_realtime(void);
+
+/* set rtc while preserving elapsed realtime */
+int alarm_set_rtc(const struct timespec ts);
+
+#endif
+
enum android_alarm_return_flags {
ANDROID_ALARM_RTC_WAKEUP_MASK = 1U << ANDROID_ALARM_RTC_WAKEUP,
ANDROID_ALARM_RTC_MASK = 1U << ANDROID_ALARM_RTC,