timer-broadcast.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Dummy local timer
  3. *
  4. * Copyright (C) 2008 Paul Mundt
  5. *
  6. * cloned from:
  7. *
  8. * linux/arch/arm/mach-realview/localtimer.c
  9. *
  10. * Copyright (C) 2002 ARM Ltd.
  11. * All Rights Reserved
  12. *
  13. * This program is free software; you can redistribute it and/or modify
  14. * it under the terms of the GNU General Public License version 2 as
  15. * published by the Free Software Foundation.
  16. */
  17. #include <linux/init.h>
  18. #include <linux/kernel.h>
  19. #include <linux/delay.h>
  20. #include <linux/device.h>
  21. #include <linux/smp.h>
  22. #include <linux/jiffies.h>
  23. #include <linux/percpu.h>
  24. #include <linux/clockchips.h>
  25. #include <linux/irq.h>
  26. static DEFINE_PER_CPU(struct clock_event_device, local_clockevent);
  27. /*
  28. * Used on SMP for either the local timer or SMP_MSG_TIMER
  29. */
  30. void local_timer_interrupt(void)
  31. {
  32. struct clock_event_device *clk = &__get_cpu_var(local_clockevent);
  33. clk->event_handler(clk);
  34. }
  35. static void dummy_timer_set_mode(enum clock_event_mode mode,
  36. struct clock_event_device *clk)
  37. {
  38. }
  39. void __cpuinit local_timer_setup(unsigned int cpu)
  40. {
  41. struct clock_event_device *clk = &per_cpu(local_clockevent, cpu);
  42. clk->name = "dummy_timer";
  43. clk->features = CLOCK_EVT_FEAT_DUMMY;
  44. clk->rating = 200;
  45. clk->mult = 1;
  46. clk->set_mode = dummy_timer_set_mode;
  47. clk->broadcast = smp_timer_broadcast;
  48. clk->cpumask = cpumask_of(cpu);
  49. clockevents_register_device(clk);
  50. }