aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-01-29 13:45:58 +0530
committerGary S. Robertson <gary.robertson@linaro.org>2015-07-22 16:17:12 -0500
commit5a59eab412df76a37236da97e2edaa049b865315 (patch)
treedfda0b5c99cd0d9ee2b1c3549ce2b7c2c349d39d
parentfd61abf9170bce9f94a0d1c5c7cafb2505caf11a (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.c37
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,