sbi_timer.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * SPDX-License-Identifier: BSD-2-Clause
  3. *
  4. * Copyright (c) 2019 Western Digital Corporation or its affiliates.
  5. *
  6. * Authors:
  7. * Anup Patel <anup.patel@wdc.com>
  8. */
  9. #ifndef __SBI_TIMER_H__
  10. #define __SBI_TIMER_H__
  11. #include <sbi/sbi_types.h>
  12. /** Timer hardware device */
  13. struct sbi_timer_device {
  14. /** Name of the timer operations */
  15. char name[32];
  16. /** Get free-running timer value */
  17. u64 (*timer_value)(void);
  18. /** Start timer event for current HART */
  19. void (*timer_event_start)(u64 next_event);
  20. /** Stop timer event for current HART */
  21. void (*timer_event_stop)(void);
  22. };
  23. struct sbi_scratch;
  24. /** Get timer value for current HART */
  25. u64 sbi_timer_value(void);
  26. /** Get virtualized timer value for current HART */
  27. u64 sbi_timer_virt_value(void);
  28. /** Get timer delta value for current HART */
  29. u64 sbi_timer_get_delta(void);
  30. /** Set timer delta value for current HART */
  31. void sbi_timer_set_delta(ulong delta);
  32. /** Set upper 32-bits of timer delta value for current HART */
  33. void sbi_timer_set_delta_upper(ulong delta_upper);
  34. /** Start timer event for current HART */
  35. void sbi_timer_event_start(u64 next_event);
  36. /** Process timer event for current HART */
  37. void sbi_timer_process(void);
  38. /** Get current timer device */
  39. const struct sbi_timer_device *sbi_timer_get_device(void);
  40. /** Register timer device */
  41. void sbi_timer_set_device(const struct sbi_timer_device *dev);
  42. /* Initialize timer */
  43. int sbi_timer_init(struct sbi_scratch *scratch, bool cold_boot);
  44. /* Exit timer */
  45. void sbi_timer_exit(struct sbi_scratch *scratch);
  46. #endif