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
arch
ia64
sn
kernel
sn2
timer.c
Go to the documentation of this file.
1
/*
2
* linux/arch/ia64/sn/kernel/sn2/timer.c
3
*
4
* Copyright (C) 2003 Silicon Graphics, Inc.
5
* Copyright (C) 2003 Hewlett-Packard Co
6
* David Mosberger <
[email protected]
>: updated for new timer-interpolation infrastructure
7
*/
8
9
#include <
linux/init.h
>
10
#include <linux/kernel.h>
11
#include <linux/sched.h>
12
#include <linux/time.h>
13
#include <
linux/interrupt.h
>
14
#include <
linux/clocksource.h
>
15
16
#include <asm/hw_irq.h>
17
#include <asm/timex.h>
18
19
#include <
asm/sn/leds.h
>
20
#include <
asm/sn/shub_mmr.h
>
21
#include <
asm/sn/clksupport.h
>
22
23
extern
unsigned
long
sn_rtc_cycles_per_second
;
24
25
static
cycle_t
read_sn2(
struct
clocksource
*
cs
)
26
{
27
return
(
cycle_t
)
readq
(
RTC_COUNTER_ADDR
);
28
}
29
30
static
struct
clocksource
clocksource_sn2 = {
31
.name =
"sn2_rtc"
,
32
.rating = 450,
33
.read = read_sn2,
34
.mask = (1
LL
<< 55) - 1,
35
.
flags
=
CLOCK_SOURCE_IS_CONTINUOUS
,
36
};
37
38
/*
39
* sn udelay uses the RTC instead of the ITC because the ITC is not
40
* synchronized across all CPUs, and the thread may migrate to another CPU
41
* if preemption is enabled.
42
*/
43
static
void
44
ia64_sn_udelay (
unsigned
long
usecs
)
45
{
46
unsigned
long
start
=
rtc_time
();
47
unsigned
long
end
= start +
48
usecs *
sn_rtc_cycles_per_second
/ 1000000;
49
50
while
(
time_before
((
unsigned
long
)
rtc_time
(), end))
51
cpu_relax
();
52
}
53
54
void
__init
sn_timer_init
(
void
)
55
{
56
clocksource_sn2.archdata.fsys_mmio =
RTC_COUNTER_ADDR
;
57
clocksource_register_hz(&clocksource_sn2,
sn_rtc_cycles_per_second
);
58
59
ia64_udelay
= &ia64_sn_udelay;
60
}
Generated on Thu Jan 10 2013 12:59:37 for Linux Kernel by
1.8.2