static void delay_clock_tick(test_context *ctx) { rtems_interrupt_level level; const Per_CPU_Control *cpu_self = _Per_CPU_Get_by_index(0); const Per_CPU_Control *cpu_other = _Per_CPU_Get_by_index(1); uint64_t ticks; rtems_test_assert(rtems_get_current_processor() == 0); rtems_test_spin_until_next_tick(); ticks = cpu_self->Watchdog.ticks; rtems_interrupt_local_disable(level); /* (A) */ wait(ctx, &ctx->delay_barrier_state); /* (B) */ wait(ctx, &ctx->delay_barrier_state); rtems_test_assert(cpu_self->Watchdog.ticks == ticks); rtems_test_assert(cpu_other->Watchdog.ticks == ticks + 1); rtems_interrupt_local_enable(level); rtems_test_assert(cpu_self->Watchdog.ticks == ticks + 1); rtems_test_assert(cpu_other->Watchdog.ticks == ticks + 1); /* (C) */ wait(ctx, &ctx->delay_barrier_state); }
rtems_task High_task( rtems_task_argument argument ) { rtems_interrupt_level level; _Thread_Dispatch_disable(); benchmark_timer_initialize(); rtems_interrupt_local_disable( level ); isr_disable_time = benchmark_timer_read(); benchmark_timer_initialize(); #if defined(RTEMS_SMP) rtems_interrupt_local_enable( level ); rtems_interrupt_local_disable( level ); #else rtems_interrupt_flash( level ); #endif isr_flash_time = benchmark_timer_read(); benchmark_timer_initialize(); rtems_interrupt_local_enable( level ); isr_enable_time = benchmark_timer_read(); _Thread_Dispatch_enable( _Per_CPU_Get() ); benchmark_timer_initialize(); _Thread_Dispatch_disable(); thread_disable_dispatch_time = benchmark_timer_read(); benchmark_timer_initialize(); _Thread_Dispatch_enable( _Per_CPU_Get() ); thread_enable_dispatch_time = benchmark_timer_read(); benchmark_timer_initialize(); _Thread_Set_state( _Thread_Get_executing(), STATES_SUSPENDED ); thread_set_state_time = benchmark_timer_read(); set_thread_dispatch_necessary( true ); benchmark_timer_initialize(); _Thread_Dispatch(); /* dispatches Middle_task */ }
static void enable_fiq(void) { #ifdef BSP_ARM_GIC_ENABLE_FIQ_FOR_GROUP_0 rtems_interrupt_level level; rtems_interrupt_local_disable(level); level &= ~ARM_PSR_F; rtems_interrupt_local_enable(level); #endif }
void _BSP_Fatal_error(unsigned n) { rtems_interrupt_level level; rtems_interrupt_local_disable(level); (void) level; printk("%s PANIC ERROR %u\n", rtems_get_version_string(), n); while (1) { /* Do nothing */ } }
void BSP_panic(char *s) { rtems_interrupt_level level; rtems_interrupt_local_disable(level); (void) level; printk("%s PANIC %s\n", rtems_get_version_string(), s); while (1) { /* Do nothing */ } }
/* * This is the initialization framework routine that weaves together * calls to RTEMS and the BSP in the proper sequence to initialize * the system while maximizing shared code and keeping BSP code in C * as much as possible. */ void boot_card( const char *cmdline ) { rtems_interrupt_level bsp_isr_level; /* * Make sure interrupts are disabled. */ (void) bsp_isr_level; rtems_interrupt_local_disable( bsp_isr_level ); bsp_boot_cmdline = cmdline; rtems_initialize_executive(); /*************************************************************** *************************************************************** * APPLICATION RUNS NOW!!! We will not return to here!!! * *************************************************************** ***************************************************************/ }
void ppc_exc_wrapup(BSP_Exception_frame *frame) { Per_CPU_Control *cpu_self; cpu_self = _Per_CPU_Get(); if (cpu_self->isr_dispatch_disable) { return; } while (cpu_self->dispatch_necessary) { rtems_interrupt_level level; cpu_self->isr_dispatch_disable = 1; cpu_self->thread_dispatch_disable_level = 1; _Thread_Do_dispatch(cpu_self, frame->EXC_SRR1); rtems_interrupt_local_disable(level); (void) level; cpu_self = _Per_CPU_Get(); } cpu_self->isr_dispatch_disable = 0; }
/* * This is the initialization framework routine that weaves together * calls to RTEMS and the BSP in the proper sequence to initialize * the system while maximizing shared code and keeping BSP code in C * as much as possible. */ void boot_card( const char *cmdline ) { rtems_interrupt_level bsp_isr_level; /* * Make sure interrupts are disabled. */ (void) bsp_isr_level; rtems_interrupt_local_disable( bsp_isr_level ); bsp_boot_cmdline = cmdline; /* * Invoke Board Support Package initialization routine written in C. */ bsp_start(); /* * Initialize the RTEMS Workspace and the C Program Heap. */ bsp_work_area_initialize(); /* * Initialize RTEMS data structures */ rtems_initialize_data_structures(); /* * Initialize the C library for those BSPs using the shared * framework. */ bsp_libc_init(); /* * Let the BSP do any required initialization now that RTEMS * data structures are initialized. In older BSPs or those * which do not use the shared framework, this is the typical * time when the C Library is initialized so malloc() * can be called by device drivers. For BSPs using the shared * framework, this routine can be empty. */ bsp_pretasking_hook(); /* * If debug is enabled, then enable all dynamic RTEMS debug * capabilities. * * NOTE: Most debug features are conditionally compiled in * or enabled via configure time plugins. */ #ifdef RTEMS_DEBUG rtems_debug_enable( RTEMS_DEBUG_ALL_MASK ); #endif /* * Let RTEMS perform initialization it requires before drivers * are allowed to be initialized. */ rtems_initialize_before_drivers(); /* * Execute BSP specific pre-driver hook. Drivers haven't gotten * to initialize yet so this is a good chance to initialize * buses, spurious interrupt handlers, etc.. * * NOTE: Many BSPs do not require this handler and use the * shared stub. */ bsp_predriver_hook(); /* * Initialize all device drivers. */ rtems_initialize_device_drivers(); /* * Invoke the postdriver hook. This normally opens /dev/console * for use as stdin, stdout, and stderr. */ bsp_postdriver_hook(); /* * Complete initialization of RTEMS and switch to the first task. * Global C++ constructors will be executed in the context of that task. */ rtems_initialize_start_multitasking(); /*************************************************************** *************************************************************** * APPLICATION RUNS NOW!!! We will not return to here!!! * *************************************************************** ***************************************************************/ }