summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-01-29 13:45:58 +0530
committerSantosh Shukla <sshukla@mvista.com>2015-04-15 09:38:40 +0000
commitca07a013f7a0ae16900e680fad294a3b0a97aade (patch)
treebfa27ca320d827b299b79ebf6d7b07f77b8e5df1
parent0525d92f1a31d3778e04e3168e6007db22b64c11 (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 8e644f51f16..fabd678b203 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,