28#ifdef Clock_driver_nanoseconds_since_last_tick
29#error "Update driver to use the timecounter instead of nanoseconds extension"
40#if CLOCK_DRIVER_USE_FAST_IDLE && CLOCK_DRIVER_ISRS_PER_TICK
41#error "Fast Idle PLUS n ISRs per tick is not supported"
47#ifndef Clock_driver_support_install_isr
48 #define Clock_driver_support_install_isr(isr)
54#ifndef Clock_driver_support_find_timer
55 #define Clock_driver_support_find_timer()
61#ifndef Clock_driver_support_at_tick
62 #define Clock_driver_support_at_tick()
68#ifndef Clock_driver_support_set_interrupt_affinity
69 #define Clock_driver_support_set_interrupt_affinity(online_processors)
76#ifndef Clock_driver_timecounter_tick
77static void Clock_driver_timecounter_tick(
void )
79#if defined(CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER)
81#elif defined(RTEMS_SMP) && defined(CLOCK_DRIVER_USE_ONLY_BOOT_PROCESSOR)
85 cpu_max = _SMP_Get_processor_maximum();
87 for ( cpu_index = 0 ; cpu_index < cpu_max ; ++cpu_index ) {
90 cpu = _Per_CPU_Get_by_index( cpu_index );
92 if ( _Per_CPU_Is_boot_processor( cpu ) ) {
107#if CLOCK_DRIVER_ISRS_PER_TICK
108 volatile uint32_t Clock_driver_isrs;
116#ifdef Clock_driver_support_shutdown_hardware
117#error "Clock_driver_support_shutdown_hardware() is no longer supported"
127#if defined(BSP_FEATURE_IRQ_EXTENSION) || \
128 (CPU_SIMPLE_VECTORED_INTERRUPTS != TRUE)
144 #if CLOCK_DRIVER_USE_FAST_IDLE
147 uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick();
148 uint32_t interval = (uint32_t)
149 ((tc->tc_frequency * us_per_tick) / 1000000);
151 Clock_driver_timecounter_tick();
153 if (_SMP_Get_processor_maximum() == 1) {
155 _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle
162 (*tc->tc_get_timecount)(tc),
178 #if CLOCK_DRIVER_ISRS_PER_TICK
182 if ( !Clock_driver_isrs ) {
183 Clock_driver_timecounter_tick();
185 Clock_driver_isrs = CLOCK_DRIVER_ISRS_PER_TICK_VALUE;
192 Clock_driver_timecounter_tick();
220 Clock_driver_support_initialize_hardware();
225 #if CLOCK_DRIVER_ISRS_PER_TICK
226 Clock_driver_isrs = CLOCK_DRIVER_ISRS_PER_TICK_VALUE;
#define Clock_driver_support_find_timer()
This method is rarely used so default it.
Definition: clockimpl.h:55
#define Clock_driver_support_set_interrupt_affinity(online_processors)
Do nothing by default.
Definition: clockimpl.h:69
#define Clock_driver_support_install_isr(isr)
Do nothing by default.
Definition: clockimpl.h:48
rtems_isr Clock_isr(rtems_vector_number vector)
Clock_isr.
Definition: clockimpl.h:134
#define Clock_driver_support_at_tick()
Do nothing by default.
Definition: clockimpl.h:62
rtems_status_code rtems_clock_tick(void)
Announce a Clock Tick.
Definition: clocktick.c:25
ISR_Handler rtems_isr
Return type for interrupt handler.
Definition: intr.h:52
ISR_Vector_number rtems_vector_number
Control block type used to manage the vectors.
Definition: intr.h:47
volatile uint32_t Clock_driver_ticks
ISRs until next clock tick.
Definition: clockimpl.h:114
void _Clock_Initialize(void)
Initialize the clock driver.
Definition: clockimpl.h:197
RTEMS_INLINE_ROUTINE bool _Processor_mask_Is_set(const Processor_mask *mask, uint32_t index)
Checks if the specified index bit of the mask is set.
Definition: processormask.h:139
RTEMS_INLINE_ROUTINE const Processor_mask * _SMP_Get_online_processors(void)
Gets all online processors.
Definition: smpimpl.h:318
void _Timecounter_Tick_simple(uint32_t delta, uint32_t offset, ISR_lock_Context *lock_context)
Performs a simple timecounter tick.
#define _Timecounter_Acquire(lock_context)
Lock to protect the timecounter mechanic.
Definition: timecounter.h:201
struct timecounter * _Timecounter
The current timecounter.
void _Watchdog_Tick(struct Per_CPU_Control *cpu)
Performs a watchdog tick.
Definition: watchdogtick.c:54
RTEMS_INLINE_ROUTINE void rtems_timecounter_tick(void)
Performs a timecounter tick.
Definition: timecounter.h:83
Constants and Structures Related with the Thread Control Block.
SuperCore SMP Implementation.
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
Per CPU Core Structure.
Definition: percpu.h:347
Inlined Routines in the Watchdog Handler.