diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/config.h | 10 | ||||
-rw-r--r-- | include/hwtimer.h | 37 |
2 files changed, 44 insertions, 3 deletions
diff --git a/include/config.h b/include/config.h index c71d79461e..ed7acaa0ad 100644 --- a/include/config.h +++ b/include/config.h @@ -2111,6 +2111,16 @@ */ #undef CONFIG_HIBERNATE_PSL +/* + * Chip supports a 64-bit hardware timer and implements + * __hw_clock_source_read64 and __hw_clock_source_set64. + * + * Chips with this config enabled may optionally define + * __hw_clock_source_read as a 32-bit set function for + * latency-sensitive situations. + */ +#undef CONFIG_HWTIMER_64BIT + /* Use a hardware specific udelay(). */ #undef CONFIG_HW_SPECIFIC_UDELAY diff --git a/include/hwtimer.h b/include/hwtimer.h index b83fcc8e76..3c0e9aaf8a 100644 --- a/include/hwtimer.h +++ b/include/hwtimer.h @@ -25,16 +25,19 @@ uint32_t __hw_clock_event_get(void); void __hw_clock_event_clear(void); /** - * Get the value of the free-running counter used as clock + * Get the lower 32-bits of the free-running counter used as clock * * The counter resolution must be 1us, since udelay() relies on this. * * @return current counter value */ +#ifdef CONFIG_HWTIMER_64BIT +__override_proto +#endif uint32_t __hw_clock_source_read(void); /** - * Override the current value of the hardware counter + * Override the lower 32-bits of the hardware counter * * The new value takes effect immediately and the counter continues counting * from there, assuming it is enabled @@ -44,6 +47,25 @@ uint32_t __hw_clock_source_read(void); void __hw_clock_source_set(uint32_t ts); /** + * Get the 64-bit value of the free-running counter used as clock, + * only available when CONFIG_HWTIMER_64BIT is enabled. + * + * This function should only be used by common/timer.c or + * chip-specific code, as get_time() abstracts the config option away. + */ +uint64_t __hw_clock_source_read64(void); + +/** + * Override the 64-bit value of the free-running counter used as + * clock, only available when CONFIG_HWTIMER_64BIT is enabled. + * + * This function should only be used by common/timer.c or + * chip-specific code, as force_time() abstracts the config option + * away. + */ +void __hw_clock_source_set64(uint64_t timestamp); + +/** * Enable clock to a timer. * * @param n Timer number to enable/disable @@ -60,9 +82,18 @@ void __hw_timer_enable_clock(int n, int enable); int __hw_clock_source_init(uint32_t start_t); /** + * Initializes the hardware timer used to provide clock services, using the + * specified start timer value (CONFIG_HWTIMER_64BIT enabled). + * + * It returns the IRQ number of the timer routine. + */ +int __hw_clock_source_init64(uint64_t start_t); + +/** * Searches the next deadline and program it in the timer hardware. * - * overflow: if true, the 32-bit counter as overflowed since the last call. + * overflow: if true, the 32-bit counter as overflowed since the last + * call. Goes unused if CONFIG_HWTIMER_64BIT is enabled. * * This function is exported from the common timers code as an helper for the * hardware timer interrupt routine. |