1
2
3
4
5
6
7
8
9
10
11
12#ifndef _LINUX_RTC_H_
13#define _LINUX_RTC_H_
14
15
16#include <linux/types.h>
17#include <linux/interrupt.h>
18#include <linux/nvmem-provider.h>
19#include <uapi/linux/rtc.h>
20
21extern int rtc_month_days(unsigned int month, unsigned int year);
22extern int rtc_year_days(unsigned int day, unsigned int month, unsigned int year);
23extern int rtc_valid_tm(struct rtc_time *tm);
24extern time64_t rtc_tm_to_time64(struct rtc_time *tm);
25extern void rtc_time64_to_tm(time64_t time, struct rtc_time *tm);
26ktime_t rtc_tm_to_ktime(struct rtc_time tm);
27struct rtc_time rtc_ktime_to_tm(ktime_t kt);
28
29
30
31
32static inline time64_t rtc_tm_sub(struct rtc_time *lhs, struct rtc_time *rhs)
33{
34 return rtc_tm_to_time64(lhs) - rtc_tm_to_time64(rhs);
35}
36
37#include <linux/device.h>
38#include <linux/seq_file.h>
39#include <linux/cdev.h>
40#include <linux/poll.h>
41#include <linux/mutex.h>
42#include <linux/timerqueue.h>
43#include <linux/workqueue.h>
44
45extern struct class *rtc_class;
46
47
48
49
50
51
52
53
54
55
56
57
58
59struct rtc_class_ops {
60 int (*ioctl)(struct device *, unsigned int, unsigned long);
61 int (*read_time)(struct device *, struct rtc_time *);
62 int (*set_time)(struct device *, struct rtc_time *);
63 int (*read_alarm)(struct device *, struct rtc_wkalrm *);
64 int (*set_alarm)(struct device *, struct rtc_wkalrm *);
65 int (*proc)(struct device *, struct seq_file *);
66 int (*alarm_irq_enable)(struct device *, unsigned int enabled);
67 int (*read_offset)(struct device *, long *offset);
68 int (*set_offset)(struct device *, long offset);
69};
70
71struct rtc_device;
72
73struct rtc_timer {
74 struct timerqueue_node node;
75 ktime_t period;
76 void (*func)(struct rtc_device *rtc);
77 struct rtc_device *rtc;
78 int enabled;
79};
80
81
82#define RTC_DEV_BUSY 0
83
84struct rtc_device {
85 struct device dev;
86 struct module *owner;
87
88 int id;
89
90 const struct rtc_class_ops *ops;
91 struct mutex ops_lock;
92
93 struct cdev char_dev;
94 unsigned long flags;
95
96 unsigned long irq_data;
97 spinlock_t irq_lock;
98 wait_queue_head_t irq_queue;
99 struct fasync_struct *async_queue;
100
101 int irq_freq;
102 int max_user_freq;
103
104 struct timerqueue_head timerqueue;
105 struct rtc_timer aie_timer;
106 struct rtc_timer uie_rtctimer;
107 struct hrtimer pie_timer;
108 int pie_enabled;
109 struct work_struct irqwork;
110
111 int uie_unsupported;
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 unsigned long set_offset_nsec;
143
144 unsigned long features[BITS_TO_LONGS(RTC_FEATURE_CNT)];
145
146 time64_t range_min;
147 timeu64_t range_max;
148 time64_t start_secs;
149 time64_t offset_secs;
150 bool set_start_time;
151
152#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
153 struct work_struct uie_task;
154 struct timer_list uie_timer;
155
156 unsigned int oldsecs;
157 unsigned int uie_irq_active:1;
158 unsigned int stop_uie_polling:1;
159 unsigned int uie_task_active:1;
160 unsigned int uie_timer_active:1;
161#endif
162};
163#define to_rtc_device(d) container_of(d, struct rtc_device, dev)
164
165#define rtc_lock(d) mutex_lock(&d->ops_lock)
166#define rtc_unlock(d) mutex_unlock(&d->ops_lock)
167
168
169#define RTC_TIMESTAMP_BEGIN_0000 -62167219200ULL
170#define RTC_TIMESTAMP_BEGIN_1900 -2208988800LL
171#define RTC_TIMESTAMP_BEGIN_2000 946684800LL
172#define RTC_TIMESTAMP_END_2063 2966371199LL
173#define RTC_TIMESTAMP_END_2079 3471292799LL
174#define RTC_TIMESTAMP_END_2099 4102444799LL
175#define RTC_TIMESTAMP_END_2199 7258118399LL
176#define RTC_TIMESTAMP_END_9999 253402300799LL
177
178extern struct rtc_device *devm_rtc_device_register(struct device *dev,
179 const char *name,
180 const struct rtc_class_ops *ops,
181 struct module *owner);
182struct rtc_device *devm_rtc_allocate_device(struct device *dev);
183int __devm_rtc_register_device(struct module *owner, struct rtc_device *rtc);
184
185extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm);
186extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm);
187int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm);
188extern int rtc_read_alarm(struct rtc_device *rtc,
189 struct rtc_wkalrm *alrm);
190extern int rtc_set_alarm(struct rtc_device *rtc,
191 struct rtc_wkalrm *alrm);
192extern int rtc_initialize_alarm(struct rtc_device *rtc,
193 struct rtc_wkalrm *alrm);
194extern void rtc_update_irq(struct rtc_device *rtc,
195 unsigned long num, unsigned long events);
196
197extern struct rtc_device *rtc_class_open(const char *name);
198extern void rtc_class_close(struct rtc_device *rtc);
199
200extern int rtc_irq_set_state(struct rtc_device *rtc, int enabled);
201extern int rtc_irq_set_freq(struct rtc_device *rtc, int freq);
202extern int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled);
203extern int rtc_alarm_irq_enable(struct rtc_device *rtc, unsigned int enabled);
204extern int rtc_dev_update_irq_enable_emul(struct rtc_device *rtc,
205 unsigned int enabled);
206
207void rtc_handle_legacy_irq(struct rtc_device *rtc, int num, int mode);
208void rtc_aie_update_irq(struct rtc_device *rtc);
209void rtc_uie_update_irq(struct rtc_device *rtc);
210enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer);
211
212void rtc_timer_init(struct rtc_timer *timer, void (*f)(struct rtc_device *r),
213 struct rtc_device *rtc);
214int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer *timer,
215 ktime_t expires, ktime_t period);
216void rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer *timer);
217int rtc_read_offset(struct rtc_device *rtc, long *offset);
218int rtc_set_offset(struct rtc_device *rtc, long offset);
219void rtc_timer_do_work(struct work_struct *work);
220
221static inline bool is_leap_year(unsigned int year)
222{
223 return (!(year % 4) && (year % 100)) || !(year % 400);
224}
225
226#define devm_rtc_register_device(device) \
227 __devm_rtc_register_device(THIS_MODULE, device)
228
229#ifdef CONFIG_RTC_HCTOSYS_DEVICE
230extern int rtc_hctosys_ret;
231#else
232#define rtc_hctosys_ret -ENODEV
233#endif
234
235#ifdef CONFIG_RTC_NVMEM
236int devm_rtc_nvmem_register(struct rtc_device *rtc,
237 struct nvmem_config *nvmem_config);
238#else
239static inline int devm_rtc_nvmem_register(struct rtc_device *rtc,
240 struct nvmem_config *nvmem_config)
241{
242 return 0;
243}
244#endif
245
246#ifdef CONFIG_RTC_INTF_SYSFS
247int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp);
248int rtc_add_groups(struct rtc_device *rtc, const struct attribute_group **grps);
249#else
250static inline
251int rtc_add_group(struct rtc_device *rtc, const struct attribute_group *grp)
252{
253 return 0;
254}
255
256static inline
257int rtc_add_groups(struct rtc_device *rtc, const struct attribute_group **grps)
258{
259 return 0;
260}
261#endif
262#endif
263