diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2015-01-29 13:45:58 +0530 |
---|---|---|
committer | Gary S. Robertson <gary.robertson@linaro.org> | 2015-07-22 16:17:12 -0500 |
commit | 5a59eab412df76a37236da97e2edaa049b865315 (patch) | |
tree | dfda0b5c99cd0d9ee2b1c3549ce2b7c2c349d39d | |
parent | fd61abf9170bce9f94a0d1c5c7cafb2505caf11a (diff) |
x86: apic: migrate to new per-mode set_mode_*() callbacks
In order to support ONESHOT_STOPPED mode.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 8e644f51f16a..fabd678b2033 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -515,6 +515,7 @@ static void lapic_timer_setup(enum clock_event_mode mode, break; case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: + case CLOCK_EVT_MODE_ONESHOT_STOPPED: v = apic_read(APIC_LVTT); v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR); apic_write(APIC_LVTT, v); @@ -530,6 +531,36 @@ static void lapic_timer_setup(enum clock_event_mode mode, local_irq_restore(flags); } +static int lapic_set_mode_shutdown(struct clock_event_device *evt) +{ + lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt); + return 0; +} + +static int lapic_set_mode_periodic(struct clock_event_device *evt) +{ + lapic_timer_setup(CLOCK_EVT_MODE_PERIODIC, evt); + return 0; +} + +static int lapic_set_mode_oneshot(struct clock_event_device *evt) +{ + lapic_timer_setup(CLOCK_EVT_MODE_ONESHOT, evt); + return 0; +} + +static int lapic_set_mode_stop_oneshot(struct clock_event_device *evt) +{ + lapic_timer_setup(CLOCK_EVT_MODE_ONESHOT_STOPPED, evt); + return 0; +} + +static int lapic_set_mode_resume(struct clock_event_device *evt) +{ + lapic_timer_setup(CLOCK_EVT_MODE_RESUME, evt); + return 0; +} + /* * Local APIC timer broadcast function */ @@ -549,7 +580,11 @@ static struct clock_event_device lapic_clockevent = { .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP | CLOCK_EVT_FEAT_DUMMY, .shift = 32, - .set_mode = lapic_timer_setup, + .set_mode_shutdown = lapic_set_mode_shutdown, + .set_mode_periodic = lapic_set_mode_periodic, + .set_mode_oneshot = lapic_set_mode_oneshot, + .set_mode_stop_oneshot = lapic_set_mode_stop_oneshot, + .set_mode_resume = lapic_set_mode_resume, .set_next_event = lapic_next_event, .broadcast = lapic_timer_broadcast, .rating = 100, |