diff options
author | ian <ian@FreeBSD.org> | 2014-05-17 20:10:12 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2014-05-17 20:10:12 +0000 |
commit | 9f4d42e0d5ac9fd53ce7499b7ba78d5c2f392dcf (patch) | |
tree | 66ee73217081a18f0aebac5e3c89d11ff179ea73 /share | |
parent | aa723a2c5a49290b58ee56c47638f702d3422410 (diff) | |
download | FreeBSD-src-9f4d42e0d5ac9fd53ce7499b7ba78d5c2f392dcf.zip FreeBSD-src-9f4d42e0d5ac9fd53ce7499b7ba78d5c2f392dcf.tar.gz |
MFC 264019, 264041, 264048, 264049, 264050, 264051
Add support for event timers whose clock frequency can change while running.
Apparently all ARM configs build kern_et.c, but only a few of them also
build kern_clocksource.c, un-break the build by not referencing functions in
kern_clocksource if NO_EVENTTIMERS is defined.
Add variable-frequency support to the arm mpcore eventtimer driver.
mpcore_timer: Disable the timer and clear any pending bit, then setup the
new counter register values, then restart the timer. Also re-nest the parens
properly for casting the result of converting time and frequency to a count.
Diffstat (limited to 'share')
-rw-r--r-- | share/man/man9/eventtimers.9 | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/share/man/man9/eventtimers.9 b/share/man/man9/eventtimers.9 index b43bc49..0c28d76 100644 --- a/share/man/man9/eventtimers.9 +++ b/share/man/man9/eventtimers.9 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 25, 2013 +.Dd April 2, 2014 .Dt EVENTTIMERS 9 .Os .Sh NAME @@ -68,6 +68,8 @@ struct eventtimer { .Fn et_register "struct eventtimer *et" .Ft int .Fn et_deregister "struct eventtimer *et" +.Ft void +.Fn et_change_frequency "struct eventtimer *et" "uint64_t newfreq" .Fn ET_LOCK .Fn ET_UNLOCK .Ft struct eventtimer * @@ -176,6 +178,21 @@ methods control timers associated with the current CPU. .Pp Driver may deregister its functionality by calling .Fn et_deregister . +.Pp +If the frequency of the clock hardware can change while it is +running (for example, during power-saving modes), the driver must call +.Fn et_change_frequency +on each change. +If the given event timer is the active timer, +.Fn et_change_frequency +stops the timer on all CPUs, updates +.Va et->frequency , +then restarts the timer on all CPUs so that all +current events are rescheduled using the new frequency. +If the given timer is not currently active, +.Fn et_change_frequency +simply updates +.Va et->frequency . .Sh CONSUMER API .Fn et_find allows consumer to find available event timer, optionally matching specific |