localtimer.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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/hardirq.h>
  26. #include <linux/irq.h>
  27. static DEFINE_PER_CPU(struct clock_event_device, local_clockevent);
  28. /*
  29. * Used on SMP for either the local timer or SMP_MSG_TIMER
  30. */
  31. void local_timer_interrupt(void)
  32. {
  33. struct clock_event_device *clk = this_cpu_ptr(&local_clockevent);
  34. irq_enter();
  35. clk->event_handler(clk);
  36. irq_exit();
  37. }
  38. static void dummy_timer_set_mode(enum clock_event_mode mode,
  39. struct clock_event_device *clk)
  40. {
  41. }
  42. void local_timer_setup(unsigned int cpu)
  43. {
  44. struct clock_event_device *clk = &per_cpu(local_clockevent, cpu);
  45. clk->name = "dummy_timer";
  46. clk->features = CLOCK_EVT_FEAT_ONESHOT |
  47. CLOCK_EVT_FEAT_PERIODIC |
  48. CLOCK_EVT_FEAT_DUMMY;
  49. clk->rating = 400;
  50. clk->mult = 1;
  51. clk->set_mode = dummy_timer_set_mode;
  52. clk->broadcast = smp_timer_broadcast;
  53. clk->cpumask = cpumask_of(cpu);
  54. clockevents_register_device(clk);
  55. }
  56. void local_timer_stop(unsigned int cpu)
  57. {
  58. }