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) 82 uint32_t cpu_count = _SMP_Get_processor_count();
85 for ( cpu_index = 0 ; cpu_index < cpu_count ; ++cpu_index ) {
88 cpu = _Per_CPU_Get_by_index( cpu_index );
90 if ( _Per_CPU_Is_boot_processor( cpu ) ) {
92 }
else if ( _Processor_mask_Is_set( _SMP_Get_online_processors(), cpu_index ) ) {
105 #if CLOCK_DRIVER_ISRS_PER_TICK 106 volatile uint32_t Clock_driver_isrs;
114 #ifdef Clock_driver_support_shutdown_hardware 115 #error "Clock_driver_support_shutdown_hardware() is no longer supported" 125 #if defined(BSP_FEATURE_IRQ_EXTENSION) || \ 126 (CPU_SIMPLE_VECTORED_INTERRUPTS != TRUE) 142 #if CLOCK_DRIVER_USE_FAST_IDLE 145 uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick();
146 uint32_t interval = (uint32_t)
147 ((tc->tc_frequency * us_per_tick) / 1000000);
149 Clock_driver_timecounter_tick();
153 _Thread_Heir == _Thread_Executing && _Thread_Executing->is_idle
160 (*tc->tc_get_timecount)(tc),
176 #if CLOCK_DRIVER_ISRS_PER_TICK 180 if ( !Clock_driver_isrs ) {
181 Clock_driver_timecounter_tick();
183 Clock_driver_isrs = CLOCK_DRIVER_ISRS_PER_TICK;
190 Clock_driver_timecounter_tick();
207 rtems_device_major_number major,
208 rtems_device_minor_number minor,
226 _SMP_Get_online_processors()
233 Clock_driver_support_initialize_hardware();
238 #if CLOCK_DRIVER_ISRS_PER_TICK 239 Clock_driver_isrs = CLOCK_DRIVER_ISRS_PER_TICK_VALUE;
#define Clock_driver_support_install_isr(isr)
Do nothing by default.
Definition: clockimpl.h:48
#define rtems_configuration_is_smp_enabled()
Returns true if the SMP mode of operation is enabled, and false otherwise.
Definition: config.h:332
void _Watchdog_Tick(struct Per_CPU_Control *cpu)
Performs a watchdog tick.
Definition: watchdogtick.c:54
rtems_device_driver Clock_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *pargp)
Clock_initialize.
Definition: clockimpl.h:206
#define Clock_driver_support_find_timer()
This method is rarely used so default it.
Definition: clockimpl.h:55
Inlined Routines in the Watchdog Handler.
#define _Timecounter_Acquire(lock_context)
Lock to protect the timecounter mechanic.
Definition: timecounter.h:199
struct timecounter * _Timecounter
The current timecounter.
ISR_Vector_number rtems_vector_number
Control block type used to manage the vectors.
Definition: intr.h:47
RTEMS_INLINE_ROUTINE void rtems_timecounter_tick(void)
Performs a timecounter tick.
Definition: timecounter.h:81
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_status_code
Classic API Status.
Definition: status.h:43
Per CPU Core Structure.
Definition: percpu.h:290
#define Clock_driver_support_set_interrupt_affinity(online_processors)
Do nothing by default.
Definition: clockimpl.h:69
volatile uint32_t Clock_driver_ticks
ISRs until next clock tick.
Definition: clockimpl.h:112
Clock Driver for all Boards.
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
void _Timecounter_Tick_simple(uint32_t delta, uint32_t offset, ISR_lock_Context *lock_context)
Performs a simple timecounter tick.
Constants and Structures Related with the Thread Control Block.
rtems_isr Clock_isr(rtems_vector_number vector)
Clock_isr.
Definition: clockimpl.h:132
#define Clock_driver_support_at_tick()
Do nothing by default.
Definition: clockimpl.h:62
SuperCore SMP Implementation.