From 6510107e8905c22fbb6c21a4a656afc2708b591e Mon Sep 17 00:00:00 2001 From: abutterfield-ext Date: Mon, 4 Jan 2021 18:33:26 +0000 Subject: Factors out common boilerplate and passes all tests --- spec/build/testsuites/validation/model-0.yml | 1 + testsuites/validation/tc-model-events-mgr.c | 16 +- testsuites/validation/tr-model-events-mgr-0.c | 368 +++++-------------------- testsuites/validation/tr-model-events-mgr-1.c | 378 +++++-------------------- testsuites/validation/tr-model-events-mgr-2.c | 369 +++++-------------------- testsuites/validation/tr-model-events-mgr-3.c | 379 ++++++-------------------- testsuites/validation/tr-model-events-mgr.c | 373 +++---------------------- testsuites/validation/tr-model-events-mgr.h | 92 ++++++- 8 files changed, 421 insertions(+), 1555 deletions(-) diff --git a/spec/build/testsuites/validation/model-0.yml b/spec/build/testsuites/validation/model-0.yml index 14b5b6c757..3d6d532159 100644 --- a/spec/build/testsuites/validation/model-0.yml +++ b/spec/build/testsuites/validation/model-0.yml @@ -13,6 +13,7 @@ links: [] source: - testsuites/validation/ts-model-0.c - testsuites/validation/tc-model-events-mgr.c +- testsuites/validation/tr-model-events-mgr.c - testsuites/validation/tr-model-events-mgr-0.c - testsuites/validation/tr-model-events-mgr-1.c - testsuites/validation/tr-model-events-mgr-2.c diff --git a/testsuites/validation/tc-model-events-mgr.c b/testsuites/validation/tc-model-events-mgr.c index 08097467db..2c4a0f8421 100644 --- a/testsuites/validation/tc-model-events-mgr.c +++ b/testsuites/validation/tc-model-events-mgr.c @@ -106,7 +106,7 @@ static rtems_event_set GetPendingEvents( Thread_Control *thread ) */ T_TEST_CASE( RtemsModelEventsMgr0 ) { - RtemsModelEventsMgr0_Run( + RtemsModelEventsMgr_Run0( EventSend, EventReceive, GetPendingEvents, @@ -117,7 +117,7 @@ T_TEST_CASE( RtemsModelEventsMgr0 ) T_TEST_CASE( RtemsModelEventsMgr1 ) { - RtemsModelEventsMgr1_Run( + RtemsModelEventsMgr_Run1( EventSend, EventReceive, GetPendingEvents, @@ -128,7 +128,7 @@ T_TEST_CASE( RtemsModelEventsMgr1 ) T_TEST_CASE( RtemsModelEventsMgr2 ) { - RtemsModelEventsMgr2_Run( + RtemsModelEventsMgr_Run2( EventSend, EventReceive, GetPendingEvents, @@ -139,7 +139,7 @@ T_TEST_CASE( RtemsModelEventsMgr2 ) T_TEST_CASE( RtemsModelEventsMgr3 ) { - RtemsModelEventsMgr3_Run( + RtemsModelEventsMgr_Run3( EventSend, EventReceive, GetPendingEvents, @@ -203,7 +203,7 @@ static rtems_event_set GetPendingSystemEvents( Thread_Control *thread ) */ T_TEST_CASE( RtemsModelSystemEventsMgr0 ) { - RtemsModelEventsMgr0_Run( + RtemsModelEventsMgr_Run0( EventSystemSend, EventSystemReceive, GetPendingSystemEvents, @@ -214,7 +214,7 @@ T_TEST_CASE( RtemsModelSystemEventsMgr0 ) T_TEST_CASE( RtemsModelSystemEventsMgr1 ) { - RtemsModelEventsMgr1_Run( + RtemsModelEventsMgr_Run1( EventSystemSend, EventSystemReceive, GetPendingSystemEvents, @@ -225,7 +225,7 @@ T_TEST_CASE( RtemsModelSystemEventsMgr1 ) T_TEST_CASE( RtemsModelSystemEventsMgr2 ) { - RtemsModelEventsMgr2_Run( + RtemsModelEventsMgr_Run2( EventSystemSend, EventSystemReceive, GetPendingSystemEvents, @@ -236,7 +236,7 @@ T_TEST_CASE( RtemsModelSystemEventsMgr2 ) T_TEST_CASE( RtemsModelSystemEventsMgr3 ) { - RtemsModelEventsMgr3_Run( + RtemsModelEventsMgr_Run3( EventSystemSend, EventSystemReceive, GetPendingSystemEvents, diff --git a/testsuites/validation/tr-model-events-mgr-0.c b/testsuites/validation/tr-model-events-mgr-0.c index 960b11d521..726a76f8de 100644 --- a/testsuites/validation/tr-model-events-mgr-0.c +++ b/testsuites/validation/tr-model-events-mgr-0.c @@ -3,7 +3,7 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsModelEventsMgr0 + * @ingroup RTEMSTestCaseRtemsModelEventsMgr */ /* @@ -47,192 +47,8 @@ #include -#include "tr-model-events-mgr.h" - -#include - -typedef enum { - PRIO_HIGH = 1, - PRIO_NORMAL, - PRIO_LOW, - PRIO_OTHER -} Priorities; - - -typedef struct { - rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the - // corresponding RtemsModelEventsMgr0_Run() parameter - rtems_status_code ( *receive ) - ( rtems_event_set, rtems_option - , rtems_interval, rtems_event_set * ); // copy of the - // corresponding RtemsModelEventsMgr0_Run() parameter - rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the - // corresponding RtemsModelEventsMgr0_Run() parameter - unsigned int wait_class; // copy of the corresponding - // RtemsModelEventsMgr0_Run() parameter - int waiting_for_event; // copy of the corresponding - // RtemsModelEventsMgr0_Run() parameter - rtems_id receiver_id; // receiver ID used for the event send action. - rtems_event_set events_to_send; // events to send for the event send action - rtems_status_code send_status; // status of the event send action. - rtems_option receive_option_set; // option set used for the event receive action - rtems_interval receive_timeout; // timeout used for the event receive action - rtems_event_set received_events; // events received by the event receive action - rtems_status_code receive_status; // status of the event receive action - rtems_event_set unsatisfied_pending; // pending events after an event send action - // which did not satsify the event condition of the receiver - Thread_Control *runner_thread; // TCB of the runner task - rtems_id runner_id; // ID of the runner task - rtems_id worker_id; // task ID of the worker task - rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task - rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task - rtems_id runner_sched; // scheduler ID of scheduler used by the runner task - rtems_id other_sched; // scheduler ID of another scheduler - // which is not used by the runner task - T_thread_switch_log_4 thread_switch_log; // thread switch log -} RtemsModelEventsMgr0_Context; - -static RtemsModelEventsMgr0_Context - RtemsModelEventsMgr0_Instance; - -static const char PromelaModelEventsMgr[] = "/PML-EventsMgr0"; - -#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 ) - -#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES - -#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) - -typedef RtemsModelEventsMgr0_Context Context; - -RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[ - RTEMS_TASK_STORAGE_SIZE( - MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, - WORKER_ATTRIBUTES - ) -]; - -static const rtems_task_config WorkerConfig = { - .name = rtems_build_name( 'W', 'O', 'R', 'K' ), - .initial_priority = PRIO_LOW, - .storage_area = WorkerStorage, - .storage_size = sizeof( WorkerStorage ), - .maximum_thread_local_storage_size = MAX_TLS_SIZE, - .initial_modes = RTEMS_DEFAULT_MODES, - .attributes = WORKER_ATTRIBUTES -}; -static rtems_id CreateWakeupSema( void ) -{ - rtems_status_code sc; - rtems_id id; - - sc = rtems_semaphore_create( - rtems_build_name( 'W', 'K', 'U', 'P' ), - 0, - RTEMS_SIMPLE_BINARY_SEMAPHORE, - 0, - &id - ); - T_assert_rsc_success( sc ); - - return id; -} - -static void DeleteWakeupSema( rtems_id id ) -{ - if ( id != 0 ) { - rtems_status_code sc; - - sc = rtems_semaphore_delete( id ); - T_rsc_success( sc ); - } -} - -static void Wait( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); - T_quiet_rsc_success( sc ); -} - -static void Wakeup( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_release( id ); - T_quiet_rsc_success( sc ); -} - -static rtems_event_set GetPendingEvents( Context *ctx ) -{ - rtems_event_set pending; - rtems_status_code sc; - - sc = ( *ctx->receive )( - RTEMS_PENDING_EVENTS, - RTEMS_DEFAULT_OPTIONS, - 0, - &pending - ); - T_quiet_rsc_success( sc ); - - return pending; -} - - -static rtems_option mergeopts( bool wait, bool wantall ) -{ - rtems_option opts; - - if ( wait ) { opts = RTEMS_WAIT; } - else { opts = RTEMS_NO_WAIT; } ; - if ( wantall ) { opts |= RTEMS_EVENT_ALL; } - else { opts |= RTEMS_EVENT_ANY; } ; - return opts; -} - - -/* - * Here we need a mapping from model "task numbers/names" to thread Id's here - * Promela Process 3 corresponds to Task 0 (Worker), doing Send - * Promela Process 4 corresponds to Task 1 (Runner), doing Receive - */ -static rtems_id mapid( Context *ctx, int pid ) -{ - rtems_id mapped_id; - - switch ( pid ) { - case 0 : mapped_id = ctx->worker_id ; break; - case 1 : mapped_id = ctx->runner_id; break; - default : mapped_id = 0xffffffff; break; - } - return mapped_id; -} - -static void checkTaskIs( rtems_id expected_id ) -{ - rtems_id own_id; - - own_id = _Thread_Get_executing()->Object.id; - T_eq_u32( own_id, expected_id ); -} - -static void initialise_pending( rtems_event_set pending[], int max ) -{ - int i; - - for( i=0; i < max; i++ ) { - pending[i] = 0; - } -} - -static void initialise_semaphore( Context *ctx, rtems_id semaphore[] ) -{ - semaphore[0] = ctx->worker_wakeup; - semaphore[1] = ctx->runner_wakeup; -} +#include "tr-model-events-mgr.h" /* =============================================== */ @@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX]; static void TestSegment0( Context* ctx ) { /* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */ - + T_log(T_NORMAL,"@@@ 0 INIT"); initialise_pending( pending, TASK_MAX ); initialise_semaphore( ctx, semaphore ); - + } /* ===== TEST CODE SEGMENT 3 =====*/ @@ -298,17 +114,17 @@ static void TestSegment3( Context* ctx ) { checkTaskIs( ctx->worker_id ); T_log(T_NORMAL,"@@@ 3 WAIT 0"); Wait( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 14 sendrc"); - T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 14 ); - sendrc = ( *ctx->send )( mapid( ctx, 1 ), 14 ); + + T_log(T_NORMAL,"@@@ 3 CALL event_send 0 2 10 sendrc"); + T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 2), 10 ); + sendrc = ( *ctx->send )( mapid( ctx, 2 ), 10 ); T_log( T_NORMAL, "Returned 0x%x from Send", sendrc ); - - T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0"); - T_rsc_success( sendrc ); + + T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 4"); + T_rsc( sendrc, 4 ); T_log(T_NORMAL,"@@@ 3 SIGNAL 1"); Wakeup( semaphore[1] ); - + T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie"); /* Code to check that Task 0 has terminated */ } @@ -320,30 +136,13 @@ static void TestSegment4( Context* ctx ) { checkTaskIs( ctx->runner_id ); T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 WAIT 1"); Wait( semaphore[1] ); - - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 14"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 14 ); - - T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 1 1 0 recout recrc"); - T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 1, 1 ) ,0 ,&recout ); - recrc = ( *ctx->receive )( 10, mergeopts( 1, 1 ), 0, &recout ); - T_log( T_NORMAL, "Returned 0x%x from Receive", recrc ); - - T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0"); - T_rsc_success( recrc ); - T_log(T_NORMAL,"@@@ 4 SCALAR recout 10"); - T_eq_int( recout, 10 ); - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 4"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 4 ); - + T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie"); /* Code to check that Task 1 has terminated */ } @@ -351,7 +150,15 @@ static void TestSegment4( Context* ctx ) { /* =============================================== */ -static void Worker( rtems_task_argument arg ) + +static void Runner( RtemsModelEventsMgr_Context *ctx ) +{ + T_log( T_NORMAL, "Runner running" ); + TestSegment4( ctx ); + T_log( T_NORMAL, "Runner finished" ); +} + +static void Worker0( rtems_task_argument arg ) { Context *ctx; @@ -365,17 +172,26 @@ static void Worker( rtems_task_argument arg ) } +RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage0[ + RTEMS_TASK_STORAGE_SIZE( + MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, + WORKER_ATTRIBUTES + ) +]; -static void Runner( RtemsModelEventsMgr0_Context *ctx ) -{ - T_log( T_NORMAL, "Runner running" ); - TestSegment4( ctx ); - T_log( T_NORMAL, "Runner finished" ); -} +static const rtems_task_config WorkerConfig0 = { + .name = rtems_build_name( 'W', 'O', 'R', 'K' ), + .initial_priority = PRIO_LOW, + .storage_area = WorkerStorage0, + .storage_size = sizeof( WorkerStorage0 ), + .maximum_thread_local_storage_size = MAX_TLS_SIZE, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = WORKER_ATTRIBUTES +}; -static void RtemsModelEventsMgr0_Setup( - RtemsModelEventsMgr0_Context *ctx +static void RtemsModelEventsMgr_Setup0( + RtemsModelEventsMgr_Context *ctx ) { rtems_status_code sc; @@ -403,99 +219,39 @@ static void RtemsModelEventsMgr0_Setup( T_rsc_success( sc ); T_eq_u32( prio, PRIO_HIGH ); - sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id ); + sc = rtems_task_construct( &WorkerConfig0, &ctx->worker_id ); T_log( T_NORMAL, "Construct Worker, sc = %x", sc ); T_assert_rsc_success( sc ); T_log( T_NORMAL, "Starting Worker..." ); - sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx ); + sc = rtems_task_start( ctx->worker_id, Worker0, (rtems_task_argument) ctx ); T_log( T_NORMAL, "Started Worker, sc = %x", sc ); T_assert_rsc_success( sc ); } -static void RtemsModelEventsMgr0_Setup_Wrap( void *arg ) -{ - RtemsModelEventsMgr0_Context *ctx; - - ctx = arg; - RtemsModelEventsMgr0_Setup( ctx ); -} - -static void RtemsModelEventsMgr0_Teardown( - RtemsModelEventsMgr0_Context *ctx -) -{ - rtems_status_code sc; - rtems_task_priority prio; - - T_log( T_NORMAL, "Runner Teardown" ); - - prio = 0; - sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio ); - T_rsc_success( sc ); - T_eq_u32( prio, PRIO_NORMAL ); - - if ( ctx->worker_id != 0 ) { - sc = rtems_task_delete( ctx->worker_id ); - T_rsc_success( sc ); - } - DeleteWakeupSema( ctx->worker_wakeup ); - DeleteWakeupSema( ctx->runner_wakeup ); -} - -static void RtemsModelEventsMgr0_Teardown_Wrap( void *arg ) +static void RtemsModelEventsMgr_Setup_Wrap0( void *arg ) { - RtemsModelEventsMgr0_Context *ctx; + RtemsModelEventsMgr_Context *ctx; ctx = arg; - RtemsModelEventsMgr0_Teardown( ctx ); + RtemsModelEventsMgr_Setup0( ctx ); } -static size_t RtemsModelEventsMgr0_Scope( void *arg, char *buf, size_t n ) -{ - size_t pme_size; - pme_size = strlen(PromelaModelEventsMgr); - return T_str_copy(buf, PromelaModelEventsMgr, pme_size); -} +static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance0; -static T_fixture RtemsModelEventsMgr0_Fixture = { - .setup = RtemsModelEventsMgr0_Setup_Wrap, +static T_fixture RtemsModelEventsMgr_Fixture0 = { + .setup = RtemsModelEventsMgr_Setup_Wrap0, .stop = NULL, - .teardown = RtemsModelEventsMgr0_Teardown_Wrap, - .scope = RtemsModelEventsMgr0_Scope, - .initial_context = &RtemsModelEventsMgr0_Instance + .teardown = RtemsModelEventsMgr_Teardown_Wrap, + .scope = RtemsModelEventsMgr_Scope, + .initial_context = &RtemsModelEventsMgr_Instance0 }; +static T_fixture_node RtemsModelEventsMgr_Node0; - -static void RtemsModelEventsMgr0_Cleanup( - RtemsModelEventsMgr0_Context *ctx -) -{ - rtems_status_code sc; - rtems_event_set events; - - events = 0; - sc = ( *ctx->receive )( - RTEMS_ALL_EVENTS, - RTEMS_NO_WAIT | RTEMS_EVENT_ANY, - 0, - &events - ); - if ( sc == RTEMS_SUCCESSFUL ) { - T_quiet_ne_u32( events, 0 ); - } else { - T_quiet_rsc( sc, RTEMS_UNSATISFIED ); - T_quiet_eq_u32( events, 0 ); - } -} - - -static T_fixture_node RtemsModelEventsMgr0_Node; - -void RtemsModelEventsMgr0_Run( +void RtemsModelEventsMgr_Run0( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -503,7 +259,7 @@ void RtemsModelEventsMgr0_Run( int waiting_for_event ) { - RtemsModelEventsMgr0_Context *ctx; + RtemsModelEventsMgr_Context *ctx; T_set_verbosity( T_NORMAL ); @@ -513,20 +269,24 @@ void RtemsModelEventsMgr0_Run( T_log( T_NORMAL, "Pushing Test Fixture..." ); + ctx = T_push_fixture( - &RtemsModelEventsMgr0_Node, - &RtemsModelEventsMgr0_Fixture + &RtemsModelEventsMgr_Node0, + &RtemsModelEventsMgr_Fixture0 ); T_log( T_NORMAL, "Test Fixture Pushed" ); + ctx->send = send; ctx->receive = receive; ctx->get_pending_events = get_pending_events; ctx->wait_class = wait_class; ctx->waiting_for_event = waiting_for_event; - // RtemsModelEventsMgr0_Prepare( ctx ); + ctx->this_test_number = 0; + + // RtemsModelEventsMgr_Prepare( ctx ); ctx->events_to_send = 0; ctx->send_status = RTEMS_INCORRECT_STATE; ctx->received_events = 0xffffffff; @@ -534,14 +294,14 @@ void RtemsModelEventsMgr0_Run( ctx->receive_timeout = RTEMS_NO_TIMEOUT; ctx->unsatisfied_pending = 0xffffffff; memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) ); - T_eq_u32( GetPendingEvents( ctx ), 0 ); + T_eq_u32( GetPending( ctx ), 0 ); _Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL ); TestSegment0( ctx ); Runner( ctx ); - RtemsModelEventsMgr0_Cleanup( ctx ); + RtemsModelEventsMgr_Cleanup( ctx ); T_log( T_NORMAL, "Run Pop Fixture" ); T_pop_fixture(); diff --git a/testsuites/validation/tr-model-events-mgr-1.c b/testsuites/validation/tr-model-events-mgr-1.c index 99d2697711..7896f5574f 100644 --- a/testsuites/validation/tr-model-events-mgr-1.c +++ b/testsuites/validation/tr-model-events-mgr-1.c @@ -3,7 +3,7 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsModelEventsMgr1 + * @ingroup RTEMSTestCaseRtemsModelEventsMgr */ /* @@ -47,192 +47,8 @@ #include -#include "tr-model-events-mgr.h" - -#include - -typedef enum { - PRIO_HIGH = 1, - PRIO_NORMAL, - PRIO_LOW, - PRIO_OTHER -} Priorities; - - -typedef struct { - rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the - // corresponding RtemsModelEventsMgr1_Run() parameter - rtems_status_code ( *receive ) - ( rtems_event_set, rtems_option - , rtems_interval, rtems_event_set * ); // copy of the - // corresponding RtemsModelEventsMgr1_Run() parameter - rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the - // corresponding RtemsModelEventsMgr1_Run() parameter - unsigned int wait_class; // copy of the corresponding - // RtemsModelEventsMgr1_Run() parameter - int waiting_for_event; // copy of the corresponding - // RtemsModelEventsMgr1_Run() parameter - rtems_id receiver_id; // receiver ID used for the event send action. - rtems_event_set events_to_send; // events to send for the event send action - rtems_status_code send_status; // status of the event send action. - rtems_option receive_option_set; // option set used for the event receive action - rtems_interval receive_timeout; // timeout used for the event receive action - rtems_event_set received_events; // events received by the event receive action - rtems_status_code receive_status; // status of the event receive action - rtems_event_set unsatisfied_pending; // pending events after an event send action - // which did not satsify the event condition of the receiver - Thread_Control *runner_thread; // TCB of the runner task - rtems_id runner_id; // ID of the runner task - rtems_id worker_id; // task ID of the worker task - rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task - rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task - rtems_id runner_sched; // scheduler ID of scheduler used by the runner task - rtems_id other_sched; // scheduler ID of another scheduler - // which is not used by the runner task - T_thread_switch_log_4 thread_switch_log; // thread switch log -} RtemsModelEventsMgr1_Context; - -static RtemsModelEventsMgr1_Context - RtemsModelEventsMgr1_Instance; - -static const char PromelaModelEventsMgr[] = "/PML-EventsMgr1"; - -#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 ) - -#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES - -#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) - -typedef RtemsModelEventsMgr1_Context Context; - -RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[ - RTEMS_TASK_STORAGE_SIZE( - MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, - WORKER_ATTRIBUTES - ) -]; - -static const rtems_task_config WorkerConfig = { - .name = rtems_build_name( 'W', 'O', 'R', 'K' ), - .initial_priority = PRIO_LOW, - .storage_area = WorkerStorage, - .storage_size = sizeof( WorkerStorage ), - .maximum_thread_local_storage_size = MAX_TLS_SIZE, - .initial_modes = RTEMS_DEFAULT_MODES, - .attributes = WORKER_ATTRIBUTES -}; -static rtems_id CreateWakeupSema( void ) -{ - rtems_status_code sc; - rtems_id id; - - sc = rtems_semaphore_create( - rtems_build_name( 'W', 'K', 'U', 'P' ), - 0, - RTEMS_SIMPLE_BINARY_SEMAPHORE, - 0, - &id - ); - T_assert_rsc_success( sc ); - - return id; -} - -static void DeleteWakeupSema( rtems_id id ) -{ - if ( id != 0 ) { - rtems_status_code sc; - - sc = rtems_semaphore_delete( id ); - T_rsc_success( sc ); - } -} - -static void Wait( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); - T_quiet_rsc_success( sc ); -} - -static void Wakeup( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_release( id ); - T_quiet_rsc_success( sc ); -} - -static rtems_event_set GetPendingEvents( Context *ctx ) -{ - rtems_event_set pending; - rtems_status_code sc; - - sc = ( *ctx->receive )( - RTEMS_PENDING_EVENTS, - RTEMS_DEFAULT_OPTIONS, - 0, - &pending - ); - T_quiet_rsc_success( sc ); - - return pending; -} - - -static rtems_option mergeopts( bool wait, bool wantall ) -{ - rtems_option opts; - - if ( wait ) { opts = RTEMS_WAIT; } - else { opts = RTEMS_NO_WAIT; } ; - if ( wantall ) { opts |= RTEMS_EVENT_ALL; } - else { opts |= RTEMS_EVENT_ANY; } ; - return opts; -} - - -/* - * Here we need a mapping from model "task numbers/names" to thread Id's here - * Promela Process 3 corresponds to Task 0 (Worker), doing Send - * Promela Process 4 corresponds to Task 1 (Runner), doing Receive - */ -static rtems_id mapid( Context *ctx, int pid ) -{ - rtems_id mapped_id; - - switch ( pid ) { - case 0 : mapped_id = ctx->worker_id ; break; - case 1 : mapped_id = ctx->runner_id; break; - default : mapped_id = 0xffffffff; break; - } - return mapped_id; -} - -static void checkTaskIs( rtems_id expected_id ) -{ - rtems_id own_id; - - own_id = _Thread_Get_executing()->Object.id; - T_eq_u32( own_id, expected_id ); -} - -static void initialise_pending( rtems_event_set pending[], int max ) -{ - int i; - - for( i=0; i < max; i++ ) { - pending[i] = 0; - } -} - -static void initialise_semaphore( Context *ctx, rtems_id semaphore[] ) -{ - semaphore[0] = ctx->worker_wakeup; - semaphore[1] = ctx->runner_wakeup; -} +#include "tr-model-events-mgr.h" /* =============================================== */ @@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX]; static void TestSegment0( Context* ctx ) { /* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */ - + T_log(T_NORMAL,"@@@ 0 INIT"); initialise_pending( pending, TASK_MAX ); initialise_semaphore( ctx, semaphore ); - + } /* ===== TEST CODE SEGMENT 3 =====*/ @@ -298,17 +114,10 @@ static void TestSegment3( Context* ctx ) { checkTaskIs( ctx->worker_id ); T_log(T_NORMAL,"@@@ 3 WAIT 0"); Wait( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 14 sendrc"); - T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 14 ); - sendrc = ( *ctx->send )( mapid( ctx, 1 ), 14 ); - T_log( T_NORMAL, "Returned 0x%x from Send", sendrc ); - - T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0"); - T_rsc_success( sendrc ); + T_log(T_NORMAL,"@@@ 3 SIGNAL 1"); Wakeup( semaphore[1] ); - + T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie"); /* Code to check that Task 0 has terminated */ } @@ -320,30 +129,30 @@ static void TestSegment4( Context* ctx ) { checkTaskIs( ctx->runner_id ); T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 WAIT 1"); Wait( semaphore[1] ); - - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 14"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 14 ); - - T_log(T_NORMAL,"@@@ 4 CALL event_receive 6 1 1 0 recout recrc"); - T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 6, mergeopts( 1, 1 ) ,0 ,&recout ); - recrc = ( *ctx->receive )( 6, mergeopts( 1, 1 ), 0, &recout ); + + T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 0"); + pending[1] = GetPending( ctx ); + T_eq_int( pending[1], 0 ); + + T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 0 1 0 recout recrc"); + T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 0, 1 ) ,0 ,&recout ); + recrc = ( *ctx->receive )( 10, mergeopts( 0, 1 ), 0, &recout ); T_log( T_NORMAL, "Returned 0x%x from Receive", recrc ); - - T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0"); - T_rsc_success( recrc ); - T_log(T_NORMAL,"@@@ 4 SCALAR recout 6"); - T_eq_int( recout, 6 ); - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 8"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 8 ); - + + T_log(T_NORMAL,"@@@ 4 SCALAR recrc 13"); + T_rsc( recrc, 13 ); + T_log(T_NORMAL,"@@@ 4 SCALAR recout 0"); + T_eq_int( recout, 0 ); + T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 0"); + pending[1] = GetPending( ctx ); + T_eq_int( pending[1], 0 ); + T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie"); /* Code to check that Task 1 has terminated */ } @@ -351,7 +160,15 @@ static void TestSegment4( Context* ctx ) { /* =============================================== */ -static void Worker( rtems_task_argument arg ) + +static void Runner( RtemsModelEventsMgr_Context *ctx ) +{ + T_log( T_NORMAL, "Runner running" ); + TestSegment4( ctx ); + T_log( T_NORMAL, "Runner finished" ); +} + +static void Worker1( rtems_task_argument arg ) { Context *ctx; @@ -365,17 +182,26 @@ static void Worker( rtems_task_argument arg ) } +RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage1[ + RTEMS_TASK_STORAGE_SIZE( + MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, + WORKER_ATTRIBUTES + ) +]; -static void Runner( RtemsModelEventsMgr1_Context *ctx ) -{ - T_log( T_NORMAL, "Runner running" ); - TestSegment4( ctx ); - T_log( T_NORMAL, "Runner finished" ); -} +static const rtems_task_config WorkerConfig1 = { + .name = rtems_build_name( 'W', 'O', 'R', 'K' ), + .initial_priority = PRIO_LOW, + .storage_area = WorkerStorage1, + .storage_size = sizeof( WorkerStorage1 ), + .maximum_thread_local_storage_size = MAX_TLS_SIZE, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = WORKER_ATTRIBUTES +}; -static void RtemsModelEventsMgr1_Setup( - RtemsModelEventsMgr1_Context *ctx +static void RtemsModelEventsMgr_Setup1( + RtemsModelEventsMgr_Context *ctx ) { rtems_status_code sc; @@ -403,99 +229,39 @@ static void RtemsModelEventsMgr1_Setup( T_rsc_success( sc ); T_eq_u32( prio, PRIO_HIGH ); - sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id ); + sc = rtems_task_construct( &WorkerConfig1, &ctx->worker_id ); T_log( T_NORMAL, "Construct Worker, sc = %x", sc ); T_assert_rsc_success( sc ); T_log( T_NORMAL, "Starting Worker..." ); - sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx ); + sc = rtems_task_start( ctx->worker_id, Worker1, (rtems_task_argument) ctx ); T_log( T_NORMAL, "Started Worker, sc = %x", sc ); T_assert_rsc_success( sc ); } -static void RtemsModelEventsMgr1_Setup_Wrap( void *arg ) -{ - RtemsModelEventsMgr1_Context *ctx; - - ctx = arg; - RtemsModelEventsMgr1_Setup( ctx ); -} - -static void RtemsModelEventsMgr1_Teardown( - RtemsModelEventsMgr1_Context *ctx -) -{ - rtems_status_code sc; - rtems_task_priority prio; - - T_log( T_NORMAL, "Runner Teardown" ); - - prio = 0; - sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio ); - T_rsc_success( sc ); - T_eq_u32( prio, PRIO_NORMAL ); - - if ( ctx->worker_id != 0 ) { - sc = rtems_task_delete( ctx->worker_id ); - T_rsc_success( sc ); - } - DeleteWakeupSema( ctx->worker_wakeup ); - DeleteWakeupSema( ctx->runner_wakeup ); -} - -static void RtemsModelEventsMgr1_Teardown_Wrap( void *arg ) +static void RtemsModelEventsMgr_Setup_Wrap1( void *arg ) { - RtemsModelEventsMgr1_Context *ctx; + RtemsModelEventsMgr_Context *ctx; ctx = arg; - RtemsModelEventsMgr1_Teardown( ctx ); + RtemsModelEventsMgr_Setup1( ctx ); } -static size_t RtemsModelEventsMgr1_Scope( void *arg, char *buf, size_t n ) -{ - size_t pme_size; - pme_size = strlen(PromelaModelEventsMgr); - return T_str_copy(buf, PromelaModelEventsMgr, pme_size); -} +static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance1; -static T_fixture RtemsModelEventsMgr1_Fixture = { - .setup = RtemsModelEventsMgr1_Setup_Wrap, +static T_fixture RtemsModelEventsMgr_Fixture1 = { + .setup = RtemsModelEventsMgr_Setup_Wrap1, .stop = NULL, - .teardown = RtemsModelEventsMgr1_Teardown_Wrap, - .scope = RtemsModelEventsMgr1_Scope, - .initial_context = &RtemsModelEventsMgr1_Instance + .teardown = RtemsModelEventsMgr_Teardown_Wrap, + .scope = RtemsModelEventsMgr_Scope, + .initial_context = &RtemsModelEventsMgr_Instance1 }; +static T_fixture_node RtemsModelEventsMgr_Node1; - -static void RtemsModelEventsMgr1_Cleanup( - RtemsModelEventsMgr1_Context *ctx -) -{ - rtems_status_code sc; - rtems_event_set events; - - events = 0; - sc = ( *ctx->receive )( - RTEMS_ALL_EVENTS, - RTEMS_NO_WAIT | RTEMS_EVENT_ANY, - 0, - &events - ); - if ( sc == RTEMS_SUCCESSFUL ) { - T_quiet_ne_u32( events, 0 ); - } else { - T_quiet_rsc( sc, RTEMS_UNSATISFIED ); - T_quiet_eq_u32( events, 0 ); - } -} - - -static T_fixture_node RtemsModelEventsMgr1_Node; - -void RtemsModelEventsMgr1_Run( +void RtemsModelEventsMgr_Run1( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -503,7 +269,7 @@ void RtemsModelEventsMgr1_Run( int waiting_for_event ) { - RtemsModelEventsMgr1_Context *ctx; + RtemsModelEventsMgr_Context *ctx; T_set_verbosity( T_NORMAL ); @@ -513,20 +279,24 @@ void RtemsModelEventsMgr1_Run( T_log( T_NORMAL, "Pushing Test Fixture..." ); + ctx = T_push_fixture( - &RtemsModelEventsMgr1_Node, - &RtemsModelEventsMgr1_Fixture + &RtemsModelEventsMgr_Node1, + &RtemsModelEventsMgr_Fixture1 ); T_log( T_NORMAL, "Test Fixture Pushed" ); + ctx->send = send; ctx->receive = receive; ctx->get_pending_events = get_pending_events; ctx->wait_class = wait_class; ctx->waiting_for_event = waiting_for_event; - // RtemsModelEventsMgr1_Prepare( ctx ); + ctx->this_test_number = 1; + + // RtemsModelEventsMgr_Prepare( ctx ); ctx->events_to_send = 0; ctx->send_status = RTEMS_INCORRECT_STATE; ctx->received_events = 0xffffffff; @@ -534,14 +304,14 @@ void RtemsModelEventsMgr1_Run( ctx->receive_timeout = RTEMS_NO_TIMEOUT; ctx->unsatisfied_pending = 0xffffffff; memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) ); - T_eq_u32( GetPendingEvents( ctx ), 0 ); + T_eq_u32( GetPending( ctx ), 0 ); _Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL ); TestSegment0( ctx ); Runner( ctx ); - RtemsModelEventsMgr1_Cleanup( ctx ); + RtemsModelEventsMgr_Cleanup( ctx ); T_log( T_NORMAL, "Run Pop Fixture" ); T_pop_fixture(); diff --git a/testsuites/validation/tr-model-events-mgr-2.c b/testsuites/validation/tr-model-events-mgr-2.c index 9ebc89e108..eeeabb32c5 100644 --- a/testsuites/validation/tr-model-events-mgr-2.c +++ b/testsuites/validation/tr-model-events-mgr-2.c @@ -3,7 +3,7 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsModelEventsMgr2 + * @ingroup RTEMSTestCaseRtemsModelEventsMgr */ /* @@ -47,192 +47,8 @@ #include -#include "tr-model-events-mgr.h" - -#include - -typedef enum { - PRIO_HIGH = 1, - PRIO_NORMAL, - PRIO_LOW, - PRIO_OTHER -} Priorities; - - -typedef struct { - rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the - // corresponding RtemsModelEventsMgr2_Run() parameter - rtems_status_code ( *receive ) - ( rtems_event_set, rtems_option - , rtems_interval, rtems_event_set * ); // copy of the - // corresponding RtemsModelEventsMgr2_Run() parameter - rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the - // corresponding RtemsModelEventsMgr2_Run() parameter - unsigned int wait_class; // copy of the corresponding - // RtemsModelEventsMgr2_Run() parameter - int waiting_for_event; // copy of the corresponding - // RtemsModelEventsMgr2_Run() parameter - rtems_id receiver_id; // receiver ID used for the event send action. - rtems_event_set events_to_send; // events to send for the event send action - rtems_status_code send_status; // status of the event send action. - rtems_option receive_option_set; // option set used for the event receive action - rtems_interval receive_timeout; // timeout used for the event receive action - rtems_event_set received_events; // events received by the event receive action - rtems_status_code receive_status; // status of the event receive action - rtems_event_set unsatisfied_pending; // pending events after an event send action - // which did not satsify the event condition of the receiver - Thread_Control *runner_thread; // TCB of the runner task - rtems_id runner_id; // ID of the runner task - rtems_id worker_id; // task ID of the worker task - rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task - rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task - rtems_id runner_sched; // scheduler ID of scheduler used by the runner task - rtems_id other_sched; // scheduler ID of another scheduler - // which is not used by the runner task - T_thread_switch_log_4 thread_switch_log; // thread switch log -} RtemsModelEventsMgr2_Context; - -static RtemsModelEventsMgr2_Context - RtemsModelEventsMgr2_Instance; - -static const char PromelaModelEventsMgr[] = "/PML-EventsMgr2"; - -#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 ) - -#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES - -#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) - -typedef RtemsModelEventsMgr2_Context Context; - -RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[ - RTEMS_TASK_STORAGE_SIZE( - MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, - WORKER_ATTRIBUTES - ) -]; - -static const rtems_task_config WorkerConfig = { - .name = rtems_build_name( 'W', 'O', 'R', 'K' ), - .initial_priority = PRIO_LOW, - .storage_area = WorkerStorage, - .storage_size = sizeof( WorkerStorage ), - .maximum_thread_local_storage_size = MAX_TLS_SIZE, - .initial_modes = RTEMS_DEFAULT_MODES, - .attributes = WORKER_ATTRIBUTES -}; -static rtems_id CreateWakeupSema( void ) -{ - rtems_status_code sc; - rtems_id id; - - sc = rtems_semaphore_create( - rtems_build_name( 'W', 'K', 'U', 'P' ), - 0, - RTEMS_SIMPLE_BINARY_SEMAPHORE, - 0, - &id - ); - T_assert_rsc_success( sc ); - - return id; -} - -static void DeleteWakeupSema( rtems_id id ) -{ - if ( id != 0 ) { - rtems_status_code sc; - - sc = rtems_semaphore_delete( id ); - T_rsc_success( sc ); - } -} - -static void Wait( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); - T_quiet_rsc_success( sc ); -} - -static void Wakeup( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_release( id ); - T_quiet_rsc_success( sc ); -} - -static rtems_event_set GetPendingEvents( Context *ctx ) -{ - rtems_event_set pending; - rtems_status_code sc; - - sc = ( *ctx->receive )( - RTEMS_PENDING_EVENTS, - RTEMS_DEFAULT_OPTIONS, - 0, - &pending - ); - T_quiet_rsc_success( sc ); - - return pending; -} - - -static rtems_option mergeopts( bool wait, bool wantall ) -{ - rtems_option opts; - - if ( wait ) { opts = RTEMS_WAIT; } - else { opts = RTEMS_NO_WAIT; } ; - if ( wantall ) { opts |= RTEMS_EVENT_ALL; } - else { opts |= RTEMS_EVENT_ANY; } ; - return opts; -} - - -/* - * Here we need a mapping from model "task numbers/names" to thread Id's here - * Promela Process 3 corresponds to Task 0 (Worker), doing Send - * Promela Process 4 corresponds to Task 1 (Runner), doing Receive - */ -static rtems_id mapid( Context *ctx, int pid ) -{ - rtems_id mapped_id; - - switch ( pid ) { - case 0 : mapped_id = ctx->worker_id ; break; - case 1 : mapped_id = ctx->runner_id; break; - default : mapped_id = 0xffffffff; break; - } - return mapped_id; -} - -static void checkTaskIs( rtems_id expected_id ) -{ - rtems_id own_id; - - own_id = _Thread_Get_executing()->Object.id; - T_eq_u32( own_id, expected_id ); -} - -static void initialise_pending( rtems_event_set pending[], int max ) -{ - int i; - - for( i=0; i < max; i++ ) { - pending[i] = 0; - } -} - -static void initialise_semaphore( Context *ctx, rtems_id semaphore[] ) -{ - semaphore[0] = ctx->worker_wakeup; - semaphore[1] = ctx->runner_wakeup; -} +#include "tr-model-events-mgr.h" /* =============================================== */ @@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX]; static void TestSegment0( Context* ctx ) { /* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */ - + T_log(T_NORMAL,"@@@ 0 INIT"); initialise_pending( pending, TASK_MAX ); initialise_semaphore( ctx, semaphore ); - + } /* ===== TEST CODE SEGMENT 3 =====*/ @@ -298,17 +114,17 @@ static void TestSegment3( Context* ctx ) { checkTaskIs( ctx->worker_id ); T_log(T_NORMAL,"@@@ 3 WAIT 0"); Wait( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 15 sendrc"); - T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 15 ); - sendrc = ( *ctx->send )( mapid( ctx, 1 ), 15 ); + + T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 14 sendrc"); + T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 14 ); + sendrc = ( *ctx->send )( mapid( ctx, 1 ), 14 ); T_log( T_NORMAL, "Returned 0x%x from Send", sendrc ); - + T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0"); - T_rsc_success( sendrc ); + T_rsc( sendrc, 0 ); T_log(T_NORMAL,"@@@ 3 SIGNAL 1"); Wakeup( semaphore[1] ); - + T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie"); /* Code to check that Task 0 has terminated */ } @@ -320,30 +136,30 @@ static void TestSegment4( Context* ctx ) { checkTaskIs( ctx->runner_id ); T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 WAIT 1"); Wait( semaphore[1] ); - - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 15"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 15 ); - + + T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 14"); + pending[1] = GetPending( ctx ); + T_eq_int( pending[1], 14 ); + T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 1 1 0 recout recrc"); T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 1, 1 ) ,0 ,&recout ); recrc = ( *ctx->receive )( 10, mergeopts( 1, 1 ), 0, &recout ); T_log( T_NORMAL, "Returned 0x%x from Receive", recrc ); - + T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0"); - T_rsc_success( recrc ); + T_rsc( recrc, 0 ); T_log(T_NORMAL,"@@@ 4 SCALAR recout 10"); T_eq_int( recout, 10 ); - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 5"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 5 ); - + T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 4"); + pending[1] = GetPending( ctx ); + T_eq_int( pending[1], 4 ); + T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie"); /* Code to check that Task 1 has terminated */ } @@ -351,7 +167,15 @@ static void TestSegment4( Context* ctx ) { /* =============================================== */ -static void Worker( rtems_task_argument arg ) + +static void Runner( RtemsModelEventsMgr_Context *ctx ) +{ + T_log( T_NORMAL, "Runner running" ); + TestSegment4( ctx ); + T_log( T_NORMAL, "Runner finished" ); +} + +static void Worker2( rtems_task_argument arg ) { Context *ctx; @@ -365,17 +189,26 @@ static void Worker( rtems_task_argument arg ) } +RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage2[ + RTEMS_TASK_STORAGE_SIZE( + MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, + WORKER_ATTRIBUTES + ) +]; -static void Runner( RtemsModelEventsMgr2_Context *ctx ) -{ - T_log( T_NORMAL, "Runner running" ); - TestSegment4( ctx ); - T_log( T_NORMAL, "Runner finished" ); -} +static const rtems_task_config WorkerConfig2 = { + .name = rtems_build_name( 'W', 'O', 'R', 'K' ), + .initial_priority = PRIO_LOW, + .storage_area = WorkerStorage2, + .storage_size = sizeof( WorkerStorage2 ), + .maximum_thread_local_storage_size = MAX_TLS_SIZE, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = WORKER_ATTRIBUTES +}; -static void RtemsModelEventsMgr2_Setup( - RtemsModelEventsMgr2_Context *ctx +static void RtemsModelEventsMgr_Setup2( + RtemsModelEventsMgr_Context *ctx ) { rtems_status_code sc; @@ -403,99 +236,39 @@ static void RtemsModelEventsMgr2_Setup( T_rsc_success( sc ); T_eq_u32( prio, PRIO_HIGH ); - sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id ); + sc = rtems_task_construct( &WorkerConfig2, &ctx->worker_id ); T_log( T_NORMAL, "Construct Worker, sc = %x", sc ); T_assert_rsc_success( sc ); T_log( T_NORMAL, "Starting Worker..." ); - sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx ); + sc = rtems_task_start( ctx->worker_id, Worker2, (rtems_task_argument) ctx ); T_log( T_NORMAL, "Started Worker, sc = %x", sc ); T_assert_rsc_success( sc ); } -static void RtemsModelEventsMgr2_Setup_Wrap( void *arg ) -{ - RtemsModelEventsMgr2_Context *ctx; - - ctx = arg; - RtemsModelEventsMgr2_Setup( ctx ); -} - -static void RtemsModelEventsMgr2_Teardown( - RtemsModelEventsMgr2_Context *ctx -) -{ - rtems_status_code sc; - rtems_task_priority prio; - - T_log( T_NORMAL, "Runner Teardown" ); - - prio = 0; - sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio ); - T_rsc_success( sc ); - T_eq_u32( prio, PRIO_NORMAL ); - - if ( ctx->worker_id != 0 ) { - sc = rtems_task_delete( ctx->worker_id ); - T_rsc_success( sc ); - } - DeleteWakeupSema( ctx->worker_wakeup ); - DeleteWakeupSema( ctx->runner_wakeup ); -} - -static void RtemsModelEventsMgr2_Teardown_Wrap( void *arg ) +static void RtemsModelEventsMgr_Setup_Wrap2( void *arg ) { - RtemsModelEventsMgr2_Context *ctx; + RtemsModelEventsMgr_Context *ctx; ctx = arg; - RtemsModelEventsMgr2_Teardown( ctx ); + RtemsModelEventsMgr_Setup2( ctx ); } -static size_t RtemsModelEventsMgr2_Scope( void *arg, char *buf, size_t n ) -{ - size_t pme_size; - pme_size = strlen(PromelaModelEventsMgr); - return T_str_copy(buf, PromelaModelEventsMgr, pme_size); -} +static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance2; -static T_fixture RtemsModelEventsMgr2_Fixture = { - .setup = RtemsModelEventsMgr2_Setup_Wrap, +static T_fixture RtemsModelEventsMgr_Fixture2 = { + .setup = RtemsModelEventsMgr_Setup_Wrap2, .stop = NULL, - .teardown = RtemsModelEventsMgr2_Teardown_Wrap, - .scope = RtemsModelEventsMgr2_Scope, - .initial_context = &RtemsModelEventsMgr2_Instance + .teardown = RtemsModelEventsMgr_Teardown_Wrap, + .scope = RtemsModelEventsMgr_Scope, + .initial_context = &RtemsModelEventsMgr_Instance2 }; +static T_fixture_node RtemsModelEventsMgr_Node2; - -static void RtemsModelEventsMgr2_Cleanup( - RtemsModelEventsMgr2_Context *ctx -) -{ - rtems_status_code sc; - rtems_event_set events; - - events = 0; - sc = ( *ctx->receive )( - RTEMS_ALL_EVENTS, - RTEMS_NO_WAIT | RTEMS_EVENT_ANY, - 0, - &events - ); - if ( sc == RTEMS_SUCCESSFUL ) { - T_quiet_ne_u32( events, 0 ); - } else { - T_quiet_rsc( sc, RTEMS_UNSATISFIED ); - T_quiet_eq_u32( events, 0 ); - } -} - - -static T_fixture_node RtemsModelEventsMgr2_Node; - -void RtemsModelEventsMgr2_Run( +void RtemsModelEventsMgr_Run2( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -503,7 +276,7 @@ void RtemsModelEventsMgr2_Run( int waiting_for_event ) { - RtemsModelEventsMgr2_Context *ctx; + RtemsModelEventsMgr_Context *ctx; T_set_verbosity( T_NORMAL ); @@ -513,20 +286,24 @@ void RtemsModelEventsMgr2_Run( T_log( T_NORMAL, "Pushing Test Fixture..." ); + ctx = T_push_fixture( - &RtemsModelEventsMgr2_Node, - &RtemsModelEventsMgr2_Fixture + &RtemsModelEventsMgr_Node2, + &RtemsModelEventsMgr_Fixture2 ); T_log( T_NORMAL, "Test Fixture Pushed" ); + ctx->send = send; ctx->receive = receive; ctx->get_pending_events = get_pending_events; ctx->wait_class = wait_class; ctx->waiting_for_event = waiting_for_event; - // RtemsModelEventsMgr2_Prepare( ctx ); + ctx->this_test_number = 2; + + // RtemsModelEventsMgr_Prepare( ctx ); ctx->events_to_send = 0; ctx->send_status = RTEMS_INCORRECT_STATE; ctx->received_events = 0xffffffff; @@ -534,14 +311,14 @@ void RtemsModelEventsMgr2_Run( ctx->receive_timeout = RTEMS_NO_TIMEOUT; ctx->unsatisfied_pending = 0xffffffff; memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) ); - T_eq_u32( GetPendingEvents( ctx ), 0 ); + T_eq_u32( GetPending( ctx ), 0 ); _Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL ); TestSegment0( ctx ); Runner( ctx ); - RtemsModelEventsMgr2_Cleanup( ctx ); + RtemsModelEventsMgr_Cleanup( ctx ); T_log( T_NORMAL, "Run Pop Fixture" ); T_pop_fixture(); diff --git a/testsuites/validation/tr-model-events-mgr-3.c b/testsuites/validation/tr-model-events-mgr-3.c index 379fb98aa0..090a5aaee2 100644 --- a/testsuites/validation/tr-model-events-mgr-3.c +++ b/testsuites/validation/tr-model-events-mgr-3.c @@ -3,7 +3,7 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsModelEventsMgr3 + * @ingroup RTEMSTestCaseRtemsModelEventsMgr */ /* @@ -47,192 +47,8 @@ #include -#include "tr-model-events-mgr.h" - -#include - -typedef enum { - PRIO_HIGH = 1, - PRIO_NORMAL, - PRIO_LOW, - PRIO_OTHER -} Priorities; - - -typedef struct { - rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the - // corresponding RtemsModelEventsMgr3_Run() parameter - rtems_status_code ( *receive ) - ( rtems_event_set, rtems_option - , rtems_interval, rtems_event_set * ); // copy of the - // corresponding RtemsModelEventsMgr3_Run() parameter - rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the - // corresponding RtemsModelEventsMgr3_Run() parameter - unsigned int wait_class; // copy of the corresponding - // RtemsModelEventsMgr3_Run() parameter - int waiting_for_event; // copy of the corresponding - // RtemsModelEventsMgr3_Run() parameter - rtems_id receiver_id; // receiver ID used for the event send action. - rtems_event_set events_to_send; // events to send for the event send action - rtems_status_code send_status; // status of the event send action. - rtems_option receive_option_set; // option set used for the event receive action - rtems_interval receive_timeout; // timeout used for the event receive action - rtems_event_set received_events; // events received by the event receive action - rtems_status_code receive_status; // status of the event receive action - rtems_event_set unsatisfied_pending; // pending events after an event send action - // which did not satsify the event condition of the receiver - Thread_Control *runner_thread; // TCB of the runner task - rtems_id runner_id; // ID of the runner task - rtems_id worker_id; // task ID of the worker task - rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task - rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task - rtems_id runner_sched; // scheduler ID of scheduler used by the runner task - rtems_id other_sched; // scheduler ID of another scheduler - // which is not used by the runner task - T_thread_switch_log_4 thread_switch_log; // thread switch log -} RtemsModelEventsMgr3_Context; - -static RtemsModelEventsMgr3_Context - RtemsModelEventsMgr3_Instance; - -static const char PromelaModelEventsMgr[] = "/PML-EventsMgr3"; - -#define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 ) - -#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES - -#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) - -typedef RtemsModelEventsMgr3_Context Context; - -RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[ - RTEMS_TASK_STORAGE_SIZE( - MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, - WORKER_ATTRIBUTES - ) -]; - -static const rtems_task_config WorkerConfig = { - .name = rtems_build_name( 'W', 'O', 'R', 'K' ), - .initial_priority = PRIO_LOW, - .storage_area = WorkerStorage, - .storage_size = sizeof( WorkerStorage ), - .maximum_thread_local_storage_size = MAX_TLS_SIZE, - .initial_modes = RTEMS_DEFAULT_MODES, - .attributes = WORKER_ATTRIBUTES -}; -static rtems_id CreateWakeupSema( void ) -{ - rtems_status_code sc; - rtems_id id; - - sc = rtems_semaphore_create( - rtems_build_name( 'W', 'K', 'U', 'P' ), - 0, - RTEMS_SIMPLE_BINARY_SEMAPHORE, - 0, - &id - ); - T_assert_rsc_success( sc ); - - return id; -} - -static void DeleteWakeupSema( rtems_id id ) -{ - if ( id != 0 ) { - rtems_status_code sc; - - sc = rtems_semaphore_delete( id ); - T_rsc_success( sc ); - } -} - -static void Wait( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_obtain( id, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); - T_quiet_rsc_success( sc ); -} - -static void Wakeup( rtems_id id ) -{ - rtems_status_code sc; - - sc = rtems_semaphore_release( id ); - T_quiet_rsc_success( sc ); -} - -static rtems_event_set GetPendingEvents( Context *ctx ) -{ - rtems_event_set pending; - rtems_status_code sc; - - sc = ( *ctx->receive )( - RTEMS_PENDING_EVENTS, - RTEMS_DEFAULT_OPTIONS, - 0, - &pending - ); - T_quiet_rsc_success( sc ); - - return pending; -} - - -static rtems_option mergeopts( bool wait, bool wantall ) -{ - rtems_option opts; - - if ( wait ) { opts = RTEMS_WAIT; } - else { opts = RTEMS_NO_WAIT; } ; - if ( wantall ) { opts |= RTEMS_EVENT_ALL; } - else { opts |= RTEMS_EVENT_ANY; } ; - return opts; -} - - -/* - * Here we need a mapping from model "task numbers/names" to thread Id's here - * Promela Process 3 corresponds to Task 0 (Worker), doing Send - * Promela Process 4 corresponds to Task 1 (Runner), doing Receive - */ -static rtems_id mapid( Context *ctx, int pid ) -{ - rtems_id mapped_id; - - switch ( pid ) { - case 0 : mapped_id = ctx->worker_id ; break; - case 1 : mapped_id = ctx->runner_id; break; - default : mapped_id = 0xffffffff; break; - } - return mapped_id; -} - -static void checkTaskIs( rtems_id expected_id ) -{ - rtems_id own_id; - - own_id = _Thread_Get_executing()->Object.id; - T_eq_u32( own_id, expected_id ); -} - -static void initialise_pending( rtems_event_set pending[], int max ) -{ - int i; - - for( i=0; i < max; i++ ) { - pending[i] = 0; - } -} - -static void initialise_semaphore( Context *ctx, rtems_id semaphore[] ) -{ - semaphore[0] = ctx->worker_wakeup; - semaphore[1] = ctx->runner_wakeup; -} +#include "tr-model-events-mgr.h" /* =============================================== */ @@ -284,11 +100,11 @@ static rtems_id semaphore[SEMA_MAX]; static void TestSegment0( Context* ctx ) { /* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */ - + T_log(T_NORMAL,"@@@ 0 INIT"); initialise_pending( pending, TASK_MAX ); initialise_semaphore( ctx, semaphore ); - + } /* ===== TEST CODE SEGMENT 3 =====*/ @@ -298,17 +114,17 @@ static void TestSegment3( Context* ctx ) { checkTaskIs( ctx->worker_id ); T_log(T_NORMAL,"@@@ 3 WAIT 0"); Wait( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 15 sendrc"); - T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 15 ); - sendrc = ( *ctx->send )( mapid( ctx, 1 ), 15 ); + + T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 11 sendrc"); + T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 11 ); + sendrc = ( *ctx->send )( mapid( ctx, 1 ), 11 ); T_log( T_NORMAL, "Returned 0x%x from Send", sendrc ); - + T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0"); - T_rsc_success( sendrc ); + T_rsc( sendrc, 0 ); T_log(T_NORMAL,"@@@ 3 SIGNAL 1"); Wakeup( semaphore[1] ); - + T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie"); /* Code to check that Task 0 has terminated */ } @@ -320,30 +136,30 @@ static void TestSegment4( Context* ctx ) { checkTaskIs( ctx->runner_id ); T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 WAIT 1"); Wait( semaphore[1] ); - - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 15"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 15 ); - - T_log(T_NORMAL,"@@@ 4 CALL event_receive 6 1 1 0 recout recrc"); - T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 6, mergeopts( 1, 1 ) ,0 ,&recout ); - recrc = ( *ctx->receive )( 6, mergeopts( 1, 1 ), 0, &recout ); + + T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 11"); + pending[1] = GetPending( ctx ); + T_eq_int( pending[1], 11 ); + + T_log(T_NORMAL,"@@@ 4 CALL event_receive 10 1 1 0 recout recrc"); + T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 10, mergeopts( 1, 1 ) ,0 ,&recout ); + recrc = ( *ctx->receive )( 10, mergeopts( 1, 1 ), 0, &recout ); T_log( T_NORMAL, "Returned 0x%x from Receive", recrc ); - + T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0"); - T_rsc_success( recrc ); - T_log(T_NORMAL,"@@@ 4 SCALAR recout 6"); - T_eq_int( recout, 6 ); - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 9"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 9 ); - + T_rsc( recrc, 0 ); + T_log(T_NORMAL,"@@@ 4 SCALAR recout 10"); + T_eq_int( recout, 10 ); + T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 1"); + pending[1] = GetPending( ctx ); + T_eq_int( pending[1], 1 ); + T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); Wakeup( semaphore[0] ); - + T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie"); /* Code to check that Task 1 has terminated */ } @@ -351,7 +167,15 @@ static void TestSegment4( Context* ctx ) { /* =============================================== */ -static void Worker( rtems_task_argument arg ) + +static void Runner( RtemsModelEventsMgr_Context *ctx ) +{ + T_log( T_NORMAL, "Runner running" ); + TestSegment4( ctx ); + T_log( T_NORMAL, "Runner finished" ); +} + +static void Worker3( rtems_task_argument arg ) { Context *ctx; @@ -365,17 +189,26 @@ static void Worker( rtems_task_argument arg ) } +RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage3[ + RTEMS_TASK_STORAGE_SIZE( + MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, + WORKER_ATTRIBUTES + ) +]; -static void Runner( RtemsModelEventsMgr3_Context *ctx ) -{ - T_log( T_NORMAL, "Runner running" ); - TestSegment4( ctx ); - T_log( T_NORMAL, "Runner finished" ); -} +static const rtems_task_config WorkerConfig3 = { + .name = rtems_build_name( 'W', 'O', 'R', 'K' ), + .initial_priority = PRIO_LOW, + .storage_area = WorkerStorage3, + .storage_size = sizeof( WorkerStorage3 ), + .maximum_thread_local_storage_size = MAX_TLS_SIZE, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = WORKER_ATTRIBUTES +}; -static void RtemsModelEventsMgr3_Setup( - RtemsModelEventsMgr3_Context *ctx +static void RtemsModelEventsMgr_Setup3( + RtemsModelEventsMgr_Context *ctx ) { rtems_status_code sc; @@ -403,99 +236,39 @@ static void RtemsModelEventsMgr3_Setup( T_rsc_success( sc ); T_eq_u32( prio, PRIO_HIGH ); - sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id ); + sc = rtems_task_construct( &WorkerConfig3, &ctx->worker_id ); T_log( T_NORMAL, "Construct Worker, sc = %x", sc ); T_assert_rsc_success( sc ); T_log( T_NORMAL, "Starting Worker..." ); - sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx ); + sc = rtems_task_start( ctx->worker_id, Worker3, (rtems_task_argument) ctx ); T_log( T_NORMAL, "Started Worker, sc = %x", sc ); T_assert_rsc_success( sc ); } -static void RtemsModelEventsMgr3_Setup_Wrap( void *arg ) -{ - RtemsModelEventsMgr3_Context *ctx; - - ctx = arg; - RtemsModelEventsMgr3_Setup( ctx ); -} - -static void RtemsModelEventsMgr3_Teardown( - RtemsModelEventsMgr3_Context *ctx -) -{ - rtems_status_code sc; - rtems_task_priority prio; - - T_log( T_NORMAL, "Runner Teardown" ); - - prio = 0; - sc = rtems_task_set_priority( RTEMS_SELF, PRIO_HIGH, &prio ); - T_rsc_success( sc ); - T_eq_u32( prio, PRIO_NORMAL ); - - if ( ctx->worker_id != 0 ) { - sc = rtems_task_delete( ctx->worker_id ); - T_rsc_success( sc ); - } - DeleteWakeupSema( ctx->worker_wakeup ); - DeleteWakeupSema( ctx->runner_wakeup ); -} - -static void RtemsModelEventsMgr3_Teardown_Wrap( void *arg ) +static void RtemsModelEventsMgr_Setup_Wrap3( void *arg ) { - RtemsModelEventsMgr3_Context *ctx; + RtemsModelEventsMgr_Context *ctx; ctx = arg; - RtemsModelEventsMgr3_Teardown( ctx ); + RtemsModelEventsMgr_Setup3( ctx ); } -static size_t RtemsModelEventsMgr3_Scope( void *arg, char *buf, size_t n ) -{ - size_t pme_size; - pme_size = strlen(PromelaModelEventsMgr); - return T_str_copy(buf, PromelaModelEventsMgr, pme_size); -} +static RtemsModelEventsMgr_Context RtemsModelEventsMgr_Instance3; -static T_fixture RtemsModelEventsMgr3_Fixture = { - .setup = RtemsModelEventsMgr3_Setup_Wrap, +static T_fixture RtemsModelEventsMgr_Fixture3 = { + .setup = RtemsModelEventsMgr_Setup_Wrap3, .stop = NULL, - .teardown = RtemsModelEventsMgr3_Teardown_Wrap, - .scope = RtemsModelEventsMgr3_Scope, - .initial_context = &RtemsModelEventsMgr3_Instance + .teardown = RtemsModelEventsMgr_Teardown_Wrap, + .scope = RtemsModelEventsMgr_Scope, + .initial_context = &RtemsModelEventsMgr_Instance3 }; +static T_fixture_node RtemsModelEventsMgr_Node3; - -static void RtemsModelEventsMgr3_Cleanup( - RtemsModelEventsMgr3_Context *ctx -) -{ - rtems_status_code sc; - rtems_event_set events; - - events = 0; - sc = ( *ctx->receive )( - RTEMS_ALL_EVENTS, - RTEMS_NO_WAIT | RTEMS_EVENT_ANY, - 0, - &events - ); - if ( sc == RTEMS_SUCCESSFUL ) { - T_quiet_ne_u32( events, 0 ); - } else { - T_quiet_rsc( sc, RTEMS_UNSATISFIED ); - T_quiet_eq_u32( events, 0 ); - } -} - - -static T_fixture_node RtemsModelEventsMgr3_Node; - -void RtemsModelEventsMgr3_Run( +void RtemsModelEventsMgr_Run3( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -503,7 +276,7 @@ void RtemsModelEventsMgr3_Run( int waiting_for_event ) { - RtemsModelEventsMgr3_Context *ctx; + RtemsModelEventsMgr_Context *ctx; T_set_verbosity( T_NORMAL ); @@ -513,20 +286,24 @@ void RtemsModelEventsMgr3_Run( T_log( T_NORMAL, "Pushing Test Fixture..." ); + ctx = T_push_fixture( - &RtemsModelEventsMgr3_Node, - &RtemsModelEventsMgr3_Fixture + &RtemsModelEventsMgr_Node3, + &RtemsModelEventsMgr_Fixture3 ); T_log( T_NORMAL, "Test Fixture Pushed" ); + ctx->send = send; ctx->receive = receive; ctx->get_pending_events = get_pending_events; ctx->wait_class = wait_class; ctx->waiting_for_event = waiting_for_event; - // RtemsModelEventsMgr3_Prepare( ctx ); + ctx->this_test_number = 3; + + // RtemsModelEventsMgr_Prepare( ctx ); ctx->events_to_send = 0; ctx->send_status = RTEMS_INCORRECT_STATE; ctx->received_events = 0xffffffff; @@ -534,14 +311,14 @@ void RtemsModelEventsMgr3_Run( ctx->receive_timeout = RTEMS_NO_TIMEOUT; ctx->unsatisfied_pending = 0xffffffff; memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) ); - T_eq_u32( GetPendingEvents( ctx ), 0 ); + T_eq_u32( GetPending( ctx ), 0 ); _Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL ); TestSegment0( ctx ); Runner( ctx ); - RtemsModelEventsMgr3_Cleanup( ctx ); + RtemsModelEventsMgr_Cleanup( ctx ); T_log( T_NORMAL, "Run Pop Fixture" ); T_pop_fixture(); diff --git a/testsuites/validation/tr-model-events-mgr.c b/testsuites/validation/tr-model-events-mgr.c index 4bb8f9773d..77a5d1a977 100644 --- a/testsuites/validation/tr-model-events-mgr.c +++ b/testsuites/validation/tr-model-events-mgr.c @@ -49,80 +49,11 @@ #include "tr-model-events-mgr.h" -#include - -typedef enum { - PRIO_HIGH = 1, - PRIO_NORMAL, - PRIO_LOW, - PRIO_OTHER -} Priorities; - - -typedef struct { - rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the - // corresponding RtemsModelEventsMgr_Run() parameter - rtems_status_code ( *receive ) - ( rtems_event_set, rtems_option - , rtems_interval, rtems_event_set * ); // copy of the - // corresponding RtemsModelEventsMgr_Run() parameter - rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the - // corresponding RtemsModelEventsMgr_Run() parameter - unsigned int wait_class; // copy of the corresponding - // RtemsModelEventsMgr_Run() parameter - int waiting_for_event; // copy of the corresponding - // RtemsModelEventsMgr_Run() parameter - rtems_id receiver_id; // receiver ID used for the event send action. - rtems_event_set events_to_send; // events to send for the event send action - rtems_status_code send_status; // status of the event send action. - rtems_option receive_option_set; // option set used for the event receive action - rtems_interval receive_timeout; // timeout used for the event receive action - rtems_event_set received_events; // events received by the event receive action - rtems_status_code receive_status; // status of the event receive action - rtems_event_set unsatisfied_pending; // pending events after an event send action - // which did not satsify the event condition of the receiver - Thread_Control *runner_thread; // TCB of the runner task - rtems_id runner_id; // ID of the runner task - rtems_id worker_id; // task ID of the worker task - rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task - rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task - rtems_id runner_sched; // scheduler ID of scheduler used by the runner task - rtems_id other_sched; // scheduler ID of another scheduler - // which is not used by the runner task - T_thread_switch_log_4 thread_switch_log; // thread switch log -} RtemsModelEventsMgr_Context; - -static RtemsModelEventsMgr_Context - RtemsModelEventsMgr_Instance; - static const char PromelaModelEventsMgr[] = "/PML-EventsMgr"; #define INPUT_EVENTS ( RTEMS_EVENT_5 | RTEMS_EVENT_23 ) -#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES - -#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) - -typedef RtemsModelEventsMgr_Context Context; - -RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char WorkerStorage[ - RTEMS_TASK_STORAGE_SIZE( - MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, - WORKER_ATTRIBUTES - ) -]; - -static const rtems_task_config WorkerConfig = { - .name = rtems_build_name( 'W', 'O', 'R', 'K' ), - .initial_priority = PRIO_LOW, - .storage_area = WorkerStorage, - .storage_size = sizeof( WorkerStorage ), - .maximum_thread_local_storage_size = MAX_TLS_SIZE, - .initial_modes = RTEMS_DEFAULT_MODES, - .attributes = WORKER_ATTRIBUTES -}; - -static rtems_id CreateWakeupSema( void ) +rtems_id CreateWakeupSema( void ) { rtems_status_code sc; rtems_id id; @@ -139,7 +70,7 @@ static rtems_id CreateWakeupSema( void ) return id; } -static void DeleteWakeupSema( rtems_id id ) +void DeleteWakeupSema( rtems_id id ) { if ( id != 0 ) { rtems_status_code sc; @@ -149,7 +80,7 @@ static void DeleteWakeupSema( rtems_id id ) } } -static void Wait( rtems_id id ) +void Wait( rtems_id id ) { rtems_status_code sc; @@ -157,7 +88,7 @@ static void Wait( rtems_id id ) T_quiet_rsc_success( sc ); } -static void Wakeup( rtems_id id ) +void Wakeup( rtems_id id ) { rtems_status_code sc; @@ -165,7 +96,7 @@ static void Wakeup( rtems_id id ) T_quiet_rsc_success( sc ); } -static rtems_event_set GetPendingEvents( Context *ctx ) +rtems_event_set GetPending( Context *ctx ) { rtems_event_set pending; rtems_status_code sc; @@ -182,7 +113,7 @@ static rtems_event_set GetPendingEvents( Context *ctx ) } -static rtems_option mergeopts( bool wait, bool wantall ) +rtems_option mergeopts( bool wait, bool wantall ) { rtems_option opts; @@ -199,7 +130,7 @@ static rtems_option mergeopts( bool wait, bool wantall ) * Promela Process 3 corresponds to Task 0 (Worker), doing Send * Promela Process 4 corresponds to Task 1 (Runner), doing Receive */ -static rtems_id mapid( Context *ctx, int pid ) +rtems_id mapid( Context *ctx, int pid ) { rtems_id mapped_id; @@ -211,7 +142,7 @@ static rtems_id mapid( Context *ctx, int pid ) return mapped_id; } -static void checkTaskIs( rtems_id expected_id ) +void checkTaskIs( rtems_id expected_id ) { rtems_id own_id; @@ -219,7 +150,7 @@ static void checkTaskIs( rtems_id expected_id ) T_eq_u32( own_id, expected_id ); } -static void initialise_pending( rtems_event_set pending[], int max ) +void initialise_pending( rtems_event_set pending[], int max ) { int i; @@ -228,198 +159,12 @@ static void initialise_pending( rtems_event_set pending[], int max ) } } -static void initialise_semaphore( Context *ctx, rtems_id semaphore[] ) +void initialise_semaphore( Context *ctx, rtems_id semaphore[] ) { semaphore[0] = ctx->worker_wakeup; semaphore[1] = ctx->runner_wakeup; } -/* =============================================== */ - -// @@@ 0 NAME Event_Manager_TestGen -// @@@ 0 DEF NO_OF_EVENTS 4 -#define NO_OF_EVENTS 4 -// @@@ 0 DEF EVTS_NONE 0 -#define EVTS_NONE 0 -// @@@ 0 DEF EVTS_PENDING 0 -#define EVTS_PENDING 0 -// @@@ 0 DEF EVT_0 1 -#define EVT_0 1 -// @@@ 0 DEF EVT_1 2 -#define EVT_1 2 -// @@@ 0 DEF EVT_2 4 -#define EVT_2 4 -// @@@ 0 DEF EVT_3 8 -#define EVT_3 8 -// @@@ 0 DEF NO_TIMEOUT 0 -#define NO_TIMEOUT 0 -// @@@ 0 DEF TASK_MAX 2 -#define TASK_MAX 2 -// @@@ 0 DEF BAD_ID 2 -#define BAD_ID 2 -// @@@ 0 DEF SEMA_MAX 2 -#define SEMA_MAX 2 -// @@@ 0 DEF RC_OK RTEMS_SUCCESSFUL -#define RC_OK RTEMS_SUCCESSFUL -// @@@ 0 DEF RC_InvId RTEMS_INVALID_ID -#define RC_InvId RTEMS_INVALID_ID -// @@@ 0 DEF RC_InvAddr RTEMS_INVALID_ADDRESS -#define RC_InvAddr RTEMS_INVALID_ADDRESS -// @@@ 0 DEF RC_Unsat RTEMS_UNSATISFIED -#define RC_Unsat RTEMS_UNSATISFIED -// @@@ 0 DEF RC_Timeout RTEMS_TIMEOUT -#define RC_Timeout RTEMS_TIMEOUT -// @@@ 0 DCLARRAY EvtSet pending TASK_MAX -static rtems_event_set pending[TASK_MAX]; -// @@@ 0 DECL byte sendrc 0 -static rtems_status_code sendrc = 0; -// @@@ 0 DECL byte recrc 0 -static rtems_status_code recrc = 0; -// @@@ 0 DECL byte recout 0 -static rtems_event_set recout = 0; -// @@@ 0 DCLARRAY Semaphore semaphore SEMA_MAX -static rtems_id semaphore[SEMA_MAX]; - -/* ===== TEST CODE SEGMENT 0 =====*/ - -static void TestSegment0( Context* ctx ) { - /* Test Name is defined in the Test Case code (tc-model-events-mgr.c) */ - - T_log(T_NORMAL,"@@@ 0 INIT"); - initialise_pending( pending, TASK_MAX ); - initialise_semaphore( ctx, semaphore ); - -} - -/* ===== TEST CODE SEGMENT 3 =====*/ - -static void TestSegment3( Context* ctx ) { - T_log(T_NORMAL,"@@@ 3 TASK Worker"); - checkTaskIs( ctx->worker_id ); - T_log(T_NORMAL,"@@@ 3 WAIT 0"); - Wait( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 3 CALL event_send 0 1 15 sendrc"); - T_log( T_NORMAL, "Calling Send(%d,%d)", mapid( ctx, 1), 15 ); - sendrc = ( *ctx->send )( mapid( ctx, 1 ), 15 ); - T_log( T_NORMAL, "Returned 0x%x from Send", sendrc ); - - T_log(T_NORMAL,"@@@ 3 SCALAR sendrc 0"); - T_rsc_success( sendrc ); - T_log(T_NORMAL,"@@@ 3 SIGNAL 1"); - Wakeup( semaphore[1] ); - - T_log(T_NORMAL,"@@@ 3 STATE 0 Zombie"); - /* Code to check that Task 0 has terminated */ -} - -/* ===== TEST CODE SEGMENT 4 =====*/ - -static void TestSegment4( Context* ctx ) { - T_log(T_NORMAL,"@@@ 4 TASK Runner"); - checkTaskIs( ctx->runner_id ); - T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); - Wakeup( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 4 WAIT 1"); - Wait( semaphore[1] ); - - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 15"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 15 ); - - T_log(T_NORMAL,"@@@ 4 CALL event_receive 6 1 1 0 recout recrc"); - T_log( T_NORMAL, "Calling Receive(%d,%d,%d,%d)", 6, mergeopts( 1, 1 ) ,0 ,&recout ); - recrc = ( *ctx->receive )( 6, mergeopts( 1, 1 ), 0, &recout ); - T_log( T_NORMAL, "Returned 0x%x from Receive", recrc ); - - T_log(T_NORMAL,"@@@ 4 SCALAR recrc 0"); - T_rsc_success( recrc ); - T_log(T_NORMAL,"@@@ 4 SCALAR recout 6"); - T_eq_int( recout, 6 ); - T_log(T_NORMAL,"@@@ 4 SCALAR pending 1 9"); - pending[1] = GetPendingEvents( ctx ); - T_eq_int( pending[1], 9 ); - - T_log(T_NORMAL,"@@@ 4 SIGNAL 0"); - Wakeup( semaphore[0] ); - - T_log(T_NORMAL,"@@@ 4 STATE 1 Zombie"); - /* Code to check that Task 1 has terminated */ -} - -/* =============================================== */ - - -static void Worker( rtems_task_argument arg ) -{ - Context *ctx; - - ctx = (Context *) arg; - - T_log( T_NORMAL, "Worker Running" ); - TestSegment3( ctx ); - T_log( T_NORMAL, "Worker finished" ); - - rtems_task_exit(); - -} - - -static void Runner( RtemsModelEventsMgr_Context *ctx ) -{ - T_log( T_NORMAL, "Runner running" ); - TestSegment4( ctx ); - T_log( T_NORMAL, "Runner finished" ); -} - - -static void RtemsModelEventsMgr_Setup( - RtemsModelEventsMgr_Context *ctx -) -{ - rtems_status_code sc; - rtems_task_priority prio; - - T_log( T_NORMAL, "Runner Setup" ); - - memset( ctx, 0, sizeof( *ctx ) ); - ctx->runner_thread = _Thread_Get_executing(); - ctx->runner_id = ctx->runner_thread->Object.id; - ctx->worker_wakeup = CreateWakeupSema(); - ctx->runner_wakeup = CreateWakeupSema(); - - sc = rtems_task_get_scheduler( RTEMS_SELF, &ctx->runner_sched ); - T_rsc_success( sc ); - - #if defined(RTEMS_SMP) - sc = rtems_scheduler_ident_by_processor( 1, &ctx->other_sched ); - T_rsc_success( sc ); - T_ne_u32( ctx->runner_sched, ctx->other_sched ); - #endif - - prio = 0; - sc = rtems_task_set_priority( RTEMS_SELF, PRIO_NORMAL, &prio ); - T_rsc_success( sc ); - T_eq_u32( prio, PRIO_HIGH ); - - sc = rtems_task_construct( &WorkerConfig, &ctx->worker_id ); - T_log( T_NORMAL, "Construct Worker, sc = %x", sc ); - T_assert_rsc_success( sc ); - - T_log( T_NORMAL, "Starting Worker..." ); - sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx ); - T_log( T_NORMAL, "Started Worker, sc = %x", sc ); - T_assert_rsc_success( sc ); -} - -static void RtemsModelEventsMgr_Setup_Wrap( void *arg ) -{ - RtemsModelEventsMgr_Context *ctx; - - ctx = arg; - RtemsModelEventsMgr_Setup( ctx ); -} static void RtemsModelEventsMgr_Teardown( RtemsModelEventsMgr_Context *ctx @@ -444,7 +189,7 @@ static void RtemsModelEventsMgr_Teardown( DeleteWakeupSema( ctx->runner_wakeup ); } -static void RtemsModelEventsMgr_Teardown_Wrap( void *arg ) +void RtemsModelEventsMgr_Teardown_Wrap( void *arg ) { RtemsModelEventsMgr_Context *ctx; @@ -452,25 +197,34 @@ static void RtemsModelEventsMgr_Teardown_Wrap( void *arg ) RtemsModelEventsMgr_Teardown( ctx ); } -static size_t RtemsModelEventsMgr_Scope( void *arg, char *buf, size_t n ) + +size_t RtemsModelEventsMgr_Scope( void *arg, char *buf, size_t n ) { - size_t pme_size; + RtemsModelEventsMgr_Context *ctx; + size_t m; + int p10; + int tnum ; + char digit; - pme_size = strlen(PromelaModelEventsMgr); - return T_str_copy(buf, PromelaModelEventsMgr, pme_size); + ctx = arg; + p10 = POWER_OF_10; + + m = T_str_copy(buf, PromelaModelEventsMgr, n); + buf += m; + tnum = ctx->this_test_number; + while( p10 > 0 && m < n ) + { + digit = (char) ( (int) '0' + tnum / p10 ); + buf[0] = digit; + ++buf; + ++m; + tnum = tnum % p10; + p10 /= 10; + } + return m; } -static T_fixture RtemsModelEventsMgr_Fixture = { - .setup = RtemsModelEventsMgr_Setup_Wrap, - .stop = NULL, - .teardown = RtemsModelEventsMgr_Teardown_Wrap, - .scope = RtemsModelEventsMgr_Scope, - .initial_context = &RtemsModelEventsMgr_Instance -}; - - - -static void RtemsModelEventsMgr_Cleanup( +void RtemsModelEventsMgr_Cleanup( RtemsModelEventsMgr_Context *ctx ) { @@ -491,60 +245,3 @@ static void RtemsModelEventsMgr_Cleanup( T_quiet_eq_u32( events, 0 ); } } - - -static T_fixture_node RtemsModelEventsMgr_Node; - -void RtemsModelEventsMgr_Run( - rtems_status_code ( *send )( rtems_id, rtems_event_set ), - rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), - rtems_event_set ( *get_pending_events )( Thread_Control * ), - unsigned int wait_class, - int waiting_for_event -) -{ - RtemsModelEventsMgr_Context *ctx; - - T_set_verbosity( T_NORMAL ); - - T_log( T_NORMAL, "Runner Invoked" ); - T_log( T_NORMAL, "Runner Wait Class: %d", wait_class ); - T_log( T_NORMAL, "Runner WaitForEvent: %d", waiting_for_event ); - - T_log( T_NORMAL, "Pushing Test Fixture..." ); - - ctx = T_push_fixture( - &RtemsModelEventsMgr_Node, - &RtemsModelEventsMgr_Fixture - ); - - T_log( T_NORMAL, "Test Fixture Pushed" ); - - ctx->send = send; - ctx->receive = receive; - ctx->get_pending_events = get_pending_events; - ctx->wait_class = wait_class; - ctx->waiting_for_event = waiting_for_event; - - // RtemsModelEventsMgr_Prepare( ctx ); - ctx->events_to_send = 0; - ctx->send_status = RTEMS_INCORRECT_STATE; - ctx->received_events = 0xffffffff; - ctx->receive_option_set = 0; - ctx->receive_timeout = RTEMS_NO_TIMEOUT; - ctx->unsatisfied_pending = 0xffffffff; - memset( &ctx->thread_switch_log, 0, sizeof( ctx->thread_switch_log ) ); - T_eq_u32( GetPendingEvents( ctx ), 0 ); - _Thread_Wait_flags_set( ctx->runner_thread, THREAD_WAIT_FLAGS_INITIAL ); - - TestSegment0( ctx ); - - Runner( ctx ); - - RtemsModelEventsMgr_Cleanup( ctx ); - - T_log( T_NORMAL, "Run Pop Fixture" ); - T_pop_fixture(); -} - -/** @} */ diff --git a/testsuites/validation/tr-model-events-mgr.h b/testsuites/validation/tr-model-events-mgr.h index 94daaa5c79..a15f2ddfa5 100644 --- a/testsuites/validation/tr-model-events-mgr.h +++ b/testsuites/validation/tr-model-events-mgr.h @@ -51,10 +51,93 @@ #include #include +#include + #ifdef __cplusplus extern "C" { #endif + +/* + * Run Setup/Cleanup structs/functions + */ +typedef struct { + rtems_status_code ( *send )( rtems_id, rtems_event_set ); // copy of the + // corresponding RtemsModelEventsMgr_Run() parameter + rtems_status_code ( *receive ) + ( rtems_event_set, rtems_option + , rtems_interval, rtems_event_set * ); // copy of the + // corresponding RtemsModelEventsMgr_Run() parameter + rtems_event_set ( *get_pending_events )( Thread_Control * ); // copy of the + // corresponding RtemsModelEventsMgr_Run() parameter + unsigned int wait_class; // copy of the corresponding + // RtemsModelEventsMgr_Run() parameter + int waiting_for_event; // copy of the corresponding + // RtemsModelEventsMgr_Run() parameter + int this_test_number; // test number used to identify a test runner instance + rtems_id receiver_id; // receiver ID used for the event send action. + rtems_event_set events_to_send; // events to send for the event send action + rtems_status_code send_status; // status of the event send action. + rtems_option receive_option_set; // option set used for the event receive action + rtems_interval receive_timeout; // timeout used for the event receive action + rtems_event_set received_events; // events received by the event receive action + rtems_status_code receive_status; // status of the event receive action + rtems_event_set unsatisfied_pending; // pending events after an event send action + // which did not satsify the event condition of the receiver + Thread_Control *runner_thread; // TCB of the runner task + rtems_id runner_id; // ID of the runner task + rtems_id worker_id; // task ID of the worker task + rtems_id worker_wakeup; // ID of the semaphore used to wake up the worker task + rtems_id runner_wakeup; // ID of the semaphore used to wake up the runner task + rtems_id runner_sched; // scheduler ID of scheduler used by the runner task + rtems_id other_sched; // scheduler ID of another scheduler + // which is not used by the runner task + T_thread_switch_log_4 thread_switch_log; // thread switch log +} RtemsModelEventsMgr_Context; + +typedef enum { + PRIO_HIGH = 1, + PRIO_NORMAL, + PRIO_LOW, + PRIO_OTHER +} Priorities; + +#define POWER_OF_10 100 + +#define WORKER_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES + +#define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT ) + +typedef RtemsModelEventsMgr_Context Context; + +rtems_id CreateWakeupSema( void ); + +void DeleteWakeupSema( rtems_id id ); + +void Wait( rtems_id id ); + +void Wakeup( rtems_id id ) ; + +rtems_event_set GetPending( Context *ctx ); + +rtems_option mergeopts( bool wait, bool wantall ); + +rtems_id mapid( Context *ctx, int pid ) ; + +void checkTaskIs( rtems_id expected_id ) ; + +void initialise_pending( rtems_event_set pending[], int max ); + +void initialise_semaphore( Context *ctx, rtems_id semaphore[] ); + +void RtemsModelEventsMgr_Setup_Wrap( void *arg ) ; + +void RtemsModelEventsMgr_Teardown_Wrap( void *arg ) ; + +size_t RtemsModelEventsMgr_Scope( void *arg, char *buf, size_t n ) ; + +void RtemsModelEventsMgr_Cleanup( RtemsModelEventsMgr_Context *ctx ); + /** * @addtogroup RTEMSTestCaseRtemsModelEventsMgr_Run * @@ -74,7 +157,8 @@ extern "C" { * * @param waiting_for_event is the thread waiting for event state. */ -void RtemsModelEventsMgr0_Run( + +void RtemsModelEventsMgr_Run0( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -82,7 +166,7 @@ void RtemsModelEventsMgr0_Run( int waiting_for_event ); -void RtemsModelEventsMgr1_Run( +void RtemsModelEventsMgr_Run1( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -90,7 +174,7 @@ void RtemsModelEventsMgr1_Run( int waiting_for_event ); -void RtemsModelEventsMgr2_Run( +void RtemsModelEventsMgr_Run2( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), @@ -98,7 +182,7 @@ void RtemsModelEventsMgr2_Run( int waiting_for_event ); -void RtemsModelEventsMgr3_Run( +void RtemsModelEventsMgr_Run3( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), rtems_event_set ( *get_pending_events )( Thread_Control * ), -- cgit v1.2.3