diff options
Diffstat (limited to '')
-rw-r--r-- | testsuites/validation/ts-default.h | 167 |
1 files changed, 139 insertions, 28 deletions
diff --git a/testsuites/validation/ts-default.h b/testsuites/validation/ts-default.h index addf1866f5..9f317abf80 100644 --- a/testsuites/validation/ts-default.h +++ b/testsuites/validation/ts-default.h @@ -32,23 +32,29 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <rtems.h> +#include <bsp.h> #include <rtems/bspIo.h> #include <rtems/chain.h> #include <rtems/test-info.h> #include <rtems/testopts.h> #include <rtems/test.h> +#include <rtems/test-scheduler.h> -#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) +#include "ts-config.h" +#include "tx-support.h" -#define MAX_TASKS 32 +#if !defined( MAX_TLS_SIZE ) +#define MAX_TLS_SIZE TEST_MAXIMUM_TLS_SIZE +#endif + +#define MAX_TASKS ( TEST_MAXIMUM_TASKS - 1 ) #define TASK_ATTRIBUTES RTEMS_FLOATING_POINT #define TASK_STORAGE_SIZE \ RTEMS_TASK_STORAGE_SIZE( \ - MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE + \ + MAX_TLS_SIZE + TEST_MINIMUM_STACK_SIZE + \ CPU_STACK_ALIGNMENT - CPU_HEAP_ALIGNMENT, \ TASK_ATTRIBUTES \ ) @@ -75,7 +81,11 @@ static const T_config test_config = { .buf_size = sizeof( buffer ), .putchar = rtems_put_char, .verbosity = RTEMS_TEST_VERBOSITY, +#if defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) .now = T_now_clock, +#else + .now = T_now_tick, +#endif .allocate = T_memory_allocate, .deallocate = T_memory_deallocate, .action_count = T_ARRAY_SIZE( actions ), @@ -91,11 +101,29 @@ static union { rtems_chain_node node; } task_storage[ MAX_TASKS ]; -static void Init( rtems_task_argument arg ) +rtems_task_argument test_runner_argument; + +rtems_task_priority test_runner_initial_priority; + +rtems_mode test_runner_initial_modes; + +static void Runner( rtems_task_argument arg ) { int exit_code; - (void) arg; + test_runner_argument = arg; + + (void) rtems_task_mode( + RTEMS_ASR, + RTEMS_ASR_MASK, + &test_runner_initial_modes + ); + + (void) rtems_task_set_priority( + RTEMS_SELF, + PRIO_DEFAULT, + &test_runner_initial_priority + ); rtems_chain_initialize( &free_task_storage, @@ -115,16 +143,18 @@ static void Init( rtems_task_argument arg ) rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, (uint32_t) exit_code ); } -static void *task_stack_allocate( size_t size ) +void *test_task_stack_allocate( size_t size ) { if ( size > sizeof( task_storage[ 0 ] ) ) { return NULL; } + T_quiet_ge_sz( size, TEST_MINIMUM_STACK_SIZE ); + return rtems_chain_get_unprotected( &free_task_storage ); } -static void task_stack_deallocate( void *stack ) +void test_task_stack_deallocate( void *stack ) { rtems_chain_append_unprotected( &free_task_storage, @@ -132,28 +162,36 @@ static void task_stack_deallocate( void *stack ) ); } +#if !defined( CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER ) #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#endif + +#define CONFIGURE_MINIMUM_TASK_STACK_SIZE TEST_MINIMUM_STACK_SIZE + +#define CONFIGURE_INTERRUPT_STACK_SIZE TEST_INTERRUPT_STACK_SIZE -#define CONFIGURE_MAXIMUM_BARRIERS 3 +#define CONFIGURE_MAXIMUM_BARRIERS TEST_MAXIMUM_BARRIERS -#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 3 +#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES TEST_MAXIMUM_MESSAGE_QUEUES -#define CONFIGURE_MAXIMUM_PARTITIONS 3 +#define CONFIGURE_MAXIMUM_PARTITIONS TEST_MAXIMUM_PARTITIONS -#define CONFIGURE_MAXIMUM_PERIODS 3 +#define CONFIGURE_MAXIMUM_PERIODS TEST_MAXIMUM_PERIODS -#define CONFIGURE_MAXIMUM_SEMAPHORES 3 +#define CONFIGURE_MAXIMUM_SEMAPHORES TEST_MAXIMUM_SEMAPHORES -#define CONFIGURE_MAXIMUM_TASKS ( 1 + MAX_TASKS ) +#define CONFIGURE_MAXIMUM_TASKS TEST_MAXIMUM_TASKS #define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE \ CONFIGURE_MAXIMUM_TASKS -#define CONFIGURE_MAXIMUM_TIMERS 3 +#define CONFIGURE_MAXIMUM_TIMERS TEST_MAXIMUM_TIMERS -#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 3 +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS TEST_MAXIMUM_USER_EXTENSIONS -#define CONFIGURE_MICROSECONDS_PER_TICK 1000 +#define CONFIGURE_MICROSECONDS_PER_TICK TEST_MICROSECONDS_PER_TICK + +#define CONFIGURE_TICKS_PER_TIMESLICE TEST_TICKS_PER_TIMESLICE #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 0 @@ -165,35 +203,67 @@ static void task_stack_deallocate( void *stack ) #define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE -#define CONFIGURE_TASK_STACK_ALLOCATOR task_stack_allocate +#define CONFIGURE_TASK_STACK_ALLOCATOR test_task_stack_allocate -#define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_deallocate +#define CONFIGURE_TASK_STACK_DEALLOCATOR test_task_stack_deallocate #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_ATTRIBUTES TASK_ATTRIBUTES +#define CONFIGURE_INIT_TASK_ARGUMENTS TEST_RUNNER_ARGUMENT -#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES +#define CONFIGURE_INIT_TASK_ATTRIBUTES ( RTEMS_SYSTEM_TASK | TASK_ATTRIBUTES ) #define CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE TASK_STORAGE_SIZE +#define CONFIGURE_INIT_TASK_ENTRY_POINT Runner + +#define CONFIGURE_INIT_TASK_INITIAL_MODES TEST_RUNNER_INITIAL_MODES + +#define CONFIGURE_INIT_TASK_NAME TEST_RUNNER_NAME + +#define CONFIGURE_INIT_TASK_PRIORITY 0 + +#if !defined( CONFIGURE_INITIAL_EXTENSIONS ) +#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = FatalInitialExtension } +#endif + #if defined( RTEMS_SMP ) && \ ( CONFIGURE_MAXIMUM_PROCESSORS == 4 || CONFIGURE_MAXIMUM_PROCESSORS == 5 ) +#include <rtems/score/scheduleredfsmp.h> + +const Scheduler_Operations +T_scheduler_operations[ CONFIGURE_MAXIMUM_PROCESSORS ] = { + SCHEDULER_EDF_SMP_ENTRY_POINTS, + SCHEDULER_EDF_SMP_ENTRY_POINTS, + SCHEDULER_EDF_SMP_ENTRY_POINTS, +#if CONFIGURE_MAXIMUM_PROCESSORS >= 5 + SCHEDULER_EDF_SMP_ENTRY_POINTS, +#endif + SCHEDULER_EDF_SMP_ENTRY_POINTS +}; + +#undef SCHEDULER_EDF_SMP_ENTRY_POINTS + +#define SCHEDULER_EDF_SMP_ENTRY_POINTS T_SCHEDULER_ENTRY_POINTS + #define CONFIGURE_SCHEDULER_EDF_SMP #include <rtems/scheduler.h> -RTEMS_SCHEDULER_EDF_SMP(a); +RTEMS_SCHEDULER_EDF_SMP( a ); + +RTEMS_SCHEDULER_EDF_SMP( b ); -RTEMS_SCHEDULER_EDF_SMP(b); +RTEMS_SCHEDULER_EDF_SMP( c ); -RTEMS_SCHEDULER_EDF_SMP(c); +RTEMS_SCHEDULER_EDF_SMP( d ); #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \ - RTEMS_SCHEDULER_TABLE_EDF_SMP(a, rtems_build_name('A', ' ', ' ', ' ')), \ - RTEMS_SCHEDULER_TABLE_EDF_SMP(b, rtems_build_name('B', ' ', ' ', ' ')), \ - RTEMS_SCHEDULER_TABLE_EDF_SMP(c, rtems_build_name('C', ' ', ' ', ' ')) + RTEMS_SCHEDULER_TABLE_EDF_SMP( a, TEST_SCHEDULER_A_NAME ), \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( b, TEST_SCHEDULER_B_NAME ), \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( c, TEST_SCHEDULER_C_NAME ), \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( d, TEST_SCHEDULER_D_NAME ) #if CONFIGURE_MAXIMUM_PROCESSORS == 5 #define CONFIGURE_SCHEDULER_ASSIGNMENTS \ @@ -210,7 +280,48 @@ RTEMS_SCHEDULER_EDF_SMP(c); RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL) #endif -#endif /* RTEMS_SMP */ +#elif !defined( CONFIGURE_SCHEDULER_ASSIGNMENTS ) + +#include <rtems/score/schedulerpriority.h> + +#undef CONFIGURE_MAXIMUM_PROCESSORS +#define CONFIGURE_MAXIMUM_PROCESSORS 1 + +const Scheduler_Operations +T_scheduler_operations[ CONFIGURE_MAXIMUM_PROCESSORS ] = { + SCHEDULER_PRIORITY_ENTRY_POINTS +}; + +#undef SCHEDULER_PRIORITY_ENTRY_POINTS + +#define SCHEDULER_PRIORITY_ENTRY_POINTS T_SCHEDULER_ENTRY_POINTS + +#define CONFIGURE_SCHEDULER_NAME TEST_SCHEDULER_A_NAME + +#define CONFIGURE_SCHEDULER_PRIORITY + +#define CONFIGURE_MAXIMUM_PRIORITY 127 + +#endif + +#define CONFIGURE_IDLE_TASK_STACK_SIZE TEST_IDLE_STACK_SIZE + +static char test_idle_stacks[ CONFIGURE_MAXIMUM_PROCESSORS ][ + ( TEST_IDLE_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE ) +] +RTEMS_ALIGNED( CPU_INTERRUPT_STACK_ALIGNMENT ) +RTEMS_SECTION( ".rtemsstack.idle" ); + +void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size ) +{ + if ( size > sizeof( test_idle_stacks[ 0 ] ) ) { + rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 0xABAD1DEA ); + } + + return &test_idle_stacks[ cpu_index ][0]; +} + +#define CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE test_idle_task_stack_allocate #define CONFIGURE_INIT |