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 77 static 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_install_isr(isr)
Do nothing by default.
Definition: clockimpl.h:48
volatile uint32_t Clock_driver_ticks
ISRs until next clock tick.
Definition: clockimpl.h:114
RTEMS_INLINE_ROUTINE const Processor_mask * _SMP_Get_online_processors(void)
Gets all online processors.
Definition: smpimpl.h:318
#define Clock_driver_support_find_timer()
This method is rarely used so default it.
Definition: clockimpl.h:55
void _Timecounter_Tick_simple(uint32_t delta, uint32_t offset, ISR_lock_Context *lock_context)
Performs a simple timecounter tick.
struct timecounter * _Timecounter
The current timecounter.
Inlined Routines in the Watchdog Handler.
ISR_Vector_number rtems_vector_number
Control block type used to manage the vectors.
Definition: intr.h:47
#define _Timecounter_Acquire(lock_context)
Lock to protect the timecounter mechanic.
Definition: timecounter.h:201
RTEMS_INLINE_ROUTINE void rtems_timecounter_tick(void)
Performs a timecounter tick.
Definition: timecounter.h:83
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
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
Per CPU Core Structure.
Definition: percpu.h:347
#define Clock_driver_support_set_interrupt_affinity(online_processors)
Do nothing by default.
Definition: clockimpl.h:69
void _Clock_Initialize(void)
Initialize the clock driver.
Definition: clockimpl.h:197
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
Constants and Structures Related with the Thread Control Block.
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
SuperCore SMP Implementation.
void _Watchdog_Tick(struct Per_CPU_Control *cpu)
Performs a watchdog tick.
Definition: watchdogtick.c:54