Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
rtc.h
Go to the documentation of this file.
1
/*
2
* Generic RTC interface.
3
* This version contains the part of the user interface to the Real Time Clock
4
* service. It is used with both the legacy mc146818 and also EFI
5
* Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out
6
* from <linux/mc146818rtc.h> to this file for 2.4 kernels.
7
*
8
* Copyright (C) 1999 Hewlett-Packard Co.
9
* Copyright (C) 1999 Stephane Eranian <
[email protected]
>
10
*/
11
#ifndef _LINUX_RTC_H_
12
#define _LINUX_RTC_H_
13
14
15
#include <linux/types.h>
16
#include <
linux/interrupt.h
>
17
#include <
uapi/linux/rtc.h
>
18
19
extern
int
rtc_month_days
(
unsigned
int
month
,
unsigned
int
year
);
20
extern
int
rtc_year_days
(
unsigned
int
day
,
unsigned
int
month
,
unsigned
int
year
);
21
extern
int
rtc_valid_tm
(
struct
rtc_time
*
tm
);
22
extern
int
rtc_tm_to_time
(
struct
rtc_time
*
tm
,
unsigned
long
*
time
);
23
extern
void
rtc_time_to_tm
(
unsigned
long
time
,
struct
rtc_time
*
tm
);
24
ktime_t
rtc_tm_to_ktime
(
struct
rtc_time
tm
);
25
struct
rtc_time
rtc_ktime_to_tm
(
ktime_t
kt);
26
27
28
#include <linux/device.h>
29
#include <
linux/seq_file.h
>
30
#include <
linux/cdev.h
>
31
#include <linux/poll.h>
32
#include <
linux/mutex.h
>
33
#include <
linux/timerqueue.h
>
34
#include <
linux/workqueue.h
>
35
36
extern
struct
class
*
rtc_class
;
37
38
/*
39
* For these RTC methods the device parameter is the physical device
40
* on whatever bus holds the hardware (I2C, Platform, SPI, etc), which
41
* was passed to rtc_device_register(). Its driver_data normally holds
42
* device state, including the rtc_device pointer for the RTC.
43
*
44
* Most of these methods are called with rtc_device.ops_lock held,
45
* through the rtc_*(struct rtc_device *, ...) calls.
46
*
47
* The (current) exceptions are mostly filesystem hooks:
48
* - the proc() hook for procfs
49
* - non-ioctl() chardev hooks: open(), release(), read_callback()
50
*
51
* REVISIT those periodic irq calls *do* have ops_lock when they're
52
* issued through ioctl() ...
53
*/
54
struct
rtc_class_ops
{
55
int
(*
open
)(
struct
device
*);
56
void
(*
release
)(
struct
device
*);
57
int
(*
ioctl
)(
struct
device
*,
unsigned
int
,
unsigned
long
);
58
int
(*
read_time
)(
struct
device
*,
struct
rtc_time
*);
59
int
(*
set_time
)(
struct
device
*,
struct
rtc_time
*);
60
int
(*
read_alarm
)(
struct
device
*,
struct
rtc_wkalrm
*);
61
int
(*
set_alarm
)(
struct
device
*,
struct
rtc_wkalrm
*);
62
int
(*
proc
)(
struct
device
*,
struct
seq_file
*);
63
int
(*
set_mmss
)(
struct
device
*,
unsigned
long
secs);
64
int
(*
read_callback
)(
struct
device
*,
int
data
);
65
int
(*
alarm_irq_enable
)(
struct
device
*,
unsigned
int
enabled
);
66
};
67
68
#define RTC_DEVICE_NAME_SIZE 20
69
typedef
struct
rtc_task
{
70
void
(*
func
)(
void
*
private_data
);
71
void
*
private_data
;
72
}
rtc_task_t
;
73
74
75
struct
rtc_timer
{
76
struct
rtc_task
task
;
77
struct
timerqueue_node
node
;
78
ktime_t
period
;
79
int
enabled
;
80
};
81
82
83
/* flags */
84
#define RTC_DEV_BUSY 0
85
86
struct
rtc_device
87
{
88
struct
device
dev
;
89
struct
module
*
owner
;
90
91
int
id
;
92
char
name
[
RTC_DEVICE_NAME_SIZE
];
93
94
const
struct
rtc_class_ops
*
ops
;
95
struct
mutex
ops_lock
;
96
97
struct
cdev
char_dev
;
98
unsigned
long
flags
;
99
100
unsigned
long
irq_data
;
101
spinlock_t
irq_lock
;
102
wait_queue_head_t
irq_queue
;
103
struct
fasync_struct
*
async_queue
;
104
105
struct
rtc_task
*
irq_task
;
106
spinlock_t
irq_task_lock
;
107
int
irq_freq
;
108
int
max_user_freq
;
109
110
struct
timerqueue_head
timerqueue
;
111
struct
rtc_timer
aie_timer
;
112
struct
rtc_timer
uie_rtctimer
;
113
struct
hrtimer
pie_timer
;
/* sub second exp, so needs hrtimer */
114
int
pie_enabled
;
115
struct
work_struct
irqwork
;
116
/* Some hardware can't support UIE mode */
117
int
uie_unsupported
;
118
119
#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
120
struct
work_struct
uie_task;
121
struct
timer_list
uie_timer;
122
/* Those fields are protected by rtc->irq_lock */
123
unsigned
int
oldsecs;
124
unsigned
int
uie_irq_active:1;
125
unsigned
int
stop_uie_polling:1;
126
unsigned
int
uie_task_active:1;
127
unsigned
int
uie_timer_active:1;
128
#endif
129
};
130
#define to_rtc_device(d) container_of(d, struct rtc_device, dev)
131
132
extern
struct
rtc_device
*
rtc_device_register
(
const
char
*
name
,
133
struct
device
*
dev
,
134
const
struct
rtc_class_ops
*
ops
,
135
struct
module
*
owner
);
136
extern
void
rtc_device_unregister
(
struct
rtc_device
*
rtc
);
137
138
extern
int
rtc_read_time
(
struct
rtc_device
*
rtc
,
struct
rtc_time
*
tm
);
139
extern
int
rtc_set_time
(
struct
rtc_device
*
rtc
,
struct
rtc_time
*
tm
);
140
extern
int
rtc_set_mmss
(
struct
rtc_device
*
rtc
,
unsigned
long
secs);
141
int
__rtc_read_alarm
(
struct
rtc_device
*
rtc
,
struct
rtc_wkalrm
*
alarm
);
142
extern
int
rtc_read_alarm
(
struct
rtc_device
*
rtc
,
143
struct
rtc_wkalrm
*alrm);
144
extern
int
rtc_set_alarm
(
struct
rtc_device
*
rtc
,
145
struct
rtc_wkalrm
*alrm);
146
extern
int
rtc_initialize_alarm
(
struct
rtc_device
*
rtc
,
147
struct
rtc_wkalrm
*alrm);
148
extern
void
rtc_update_irq
(
struct
rtc_device
*
rtc
,
149
unsigned
long
num,
unsigned
long
events
);
150
151
extern
struct
rtc_device
*
rtc_class_open
(
char
*
name
);
152
extern
void
rtc_class_close
(
struct
rtc_device
*
rtc
);
153
154
extern
int
rtc_irq_register
(
struct
rtc_device
*
rtc
,
155
struct
rtc_task
*
task
);
156
extern
void
rtc_irq_unregister
(
struct
rtc_device
*
rtc
,
157
struct
rtc_task
*
task
);
158
extern
int
rtc_irq_set_state
(
struct
rtc_device
*
rtc
,
159
struct
rtc_task
*
task
,
int
enabled
);
160
extern
int
rtc_irq_set_freq
(
struct
rtc_device
*
rtc
,
161
struct
rtc_task
*
task
,
int
freq
);
162
extern
int
rtc_update_irq_enable
(
struct
rtc_device
*
rtc
,
unsigned
int
enabled
);
163
extern
int
rtc_alarm_irq_enable
(
struct
rtc_device
*
rtc
,
unsigned
int
enabled
);
164
extern
int
rtc_dev_update_irq_enable_emul
(
struct
rtc_device
*
rtc
,
165
unsigned
int
enabled
);
166
167
void
rtc_handle_legacy_irq
(
struct
rtc_device
*
rtc
,
int
num,
int
mode
);
168
void
rtc_aie_update_irq
(
void
*
private
);
169
void
rtc_uie_update_irq
(
void
*
private
);
170
enum
hrtimer_restart
rtc_pie_update_irq
(
struct
hrtimer
*
timer
);
171
172
int
rtc_register
(
rtc_task_t
*
task
);
173
int
rtc_unregister
(
rtc_task_t
*
task
);
174
int
rtc_control
(
rtc_task_t
*
t
,
unsigned
int
cmd
,
unsigned
long
arg
);
175
176
void
rtc_timer_init
(
struct
rtc_timer
*
timer
,
void
(*
f
)(
void
*
p
),
void
*
data
);
177
int
rtc_timer_start
(
struct
rtc_device
*
rtc
,
struct
rtc_timer
* timer,
178
ktime_t
expires,
ktime_t
period
);
179
int
rtc_timer_cancel
(
struct
rtc_device
*
rtc
,
struct
rtc_timer
* timer);
180
void
rtc_timer_do_work
(
struct
work_struct
*
work
);
181
182
static
inline
bool
is_leap_year(
unsigned
int
year
)
183
{
184
return
(!(year % 4) && (year % 100)) || !(year % 400);
185
}
186
187
#ifdef CONFIG_RTC_HCTOSYS_DEVICE
188
extern
int
rtc_hctosys_ret
;
189
#else
190
#define rtc_hctosys_ret -ENODEV
191
#endif
192
193
#endif
/* _LINUX_RTC_H_ */
Generated on Thu Jan 10 2013 12:50:25 for Linux Kernel by
1.8.2