rtems_task Init( rtems_task_argument ignored ) { rtems_status_code status; rtems_id extension; rtems_id task_id; puts( "\n\n*** TEST 56 ***" ); puts( "Init - rtems_extension_create - OK" ); status = rtems_extension_create( rtems_build_name( 'E', 'X', 'T', ' ' ), &Extensions, &extension ); directive_failed( status, "rtems_extension_create" ); puts( "Init - rtems_task_create - create extension fails - UNSATISFIED" ); status = rtems_task_create( rtems_build_name( 'T', 'A', '1', ' ' ), 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_TIMESLICE, RTEMS_FLOATING_POINT, &task_id ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_task_create" ); puts( "Init - rtems_extension_delete - OK" ); status = rtems_extension_delete( extension ); directive_failed( status, "rtems_extension_delete" ); puts( "*** END OF TEST 56 ***" ); rtems_test_exit(0); }
static void install_bsp_extension(void) { #ifdef BSP_INITIAL_EXTENSION static const rtems_extensions_table bsp_ext = BSP_INITIAL_EXTENSION; rtems_status_code sc; rtems_id id; sc = rtems_extension_create( rtems_build_name('B', 'S', 'P', ' '), &bsp_ext, &id ); rtems_test_assert(sc == RTEMS_SUCCESSFUL); #endif }
rtems_status_code rtems_capture_user_extension_open(void) { rtems_status_code sc; rtems_name name; int index; /* * Register the user extension handlers for the CAPture Engine. */ name = rtems_build_name ('C', 'A', 'P', 'E'); sc = rtems_extension_create (name, &capture_extensions, &capture_id); if (sc != RTEMS_SUCCESSFUL) capture_id = 0; else { index = rtems_object_id_get_index (capture_id); rtems_capture_set_extension_index( index ); } return sc; }
rtems_task Init( rtems_task_argument argument ) { rtems_status_code status; rtems_id id; TEST_BEGIN(); Extension_name[ 1 ] = rtems_build_name( 'E', 'X', 'T', '1' ); Extension_name[ 2 ] = rtems_build_name( 'E', 'X', 'T', '2' ); puts ( "rtems_extension_create - bad id pointer -- RTEMS_INVALID_ADDRESS" ); status = rtems_extension_create( 0xa5a5a5a5, &Extensions, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_extension_create" ); puts ( "rtems_extension_create - bad name -- RTEMS_INVALID_NAME" ); status = rtems_extension_create( 0, &Extensions, &id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_extension_create #1" ); puts( "rtems_extension_create - first one -- OK" ); status = rtems_extension_create( Extension_name[ 1 ], &Extensions, &Extension_id[ 1 ] ); directive_failed( status, "rtems_extension_create" ); puts( "rtems_extension_create - second one-- OK" ); status = rtems_extension_create( Extension_name[ 2 ], &Extensions, &Extension_id[ 2 ] ); directive_failed( status, "rtems_extension_create #2" ); puts ( "rtems_extension_create -- RTEMS_TOO_MANY" ); status = rtems_extension_create( 0xa5a5a5a5, &Extensions, &id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_extension_create" ); puts( "rtems_extension_delete - second one -- OK" ); status = rtems_extension_delete( Extension_id[ 2 ] ); directive_failed( status, "rtems_extension_delete #2" ); puts( "rtems_extension_delete - second one again -- RTEMS_INVALID_ID" ); status = rtems_extension_delete( Extension_id[ 2 ] ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_extension_delete #2 bad" ); puts ( "rtems_extension_ident -- OK" ); status = rtems_extension_ident( Extension_name[1], &id ); directive_failed( status, "rtems_extension_ident" ); puts ( "rtems_extension_ident - bad name -- RTEMS_INVALID_NAME" ); status = rtems_extension_ident( Extension_name[2], &id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_extension_ident" ); puts ( "rtems_extension_ident - bad name -- RTEMS_INVALID_ADDRESS" ); status = rtems_extension_ident( Extension_name[2], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_extension_ident" ); puts( "rtems_extension_create - harmless -- OK" ); status = rtems_extension_create( Extension_name[ 2 ], &Harmless_extensions, &Extension_id[ 2 ] ); directive_failed( status, "rtems_extension_create #3" ); Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); Task_name[ 4 ] = rtems_build_name( 'T', 'A', '4', ' ' ); status = rtems_task_create( Task_name[ 1 ], 4, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 1 ] ); directive_failed( status, "rtems_task_create of TA1" ); assert_extension_counts( &Task_created[ 0 ], 0x2 ); status = rtems_task_create( Task_name[ 2 ], 4, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 2 ] ); directive_failed( status, "rtems_task_create of TA2" ); assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 ); #define TA3_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 4u) status = rtems_task_create( Task_name[ 3 ], TA3_PRIORITY, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 3 ] ); directive_failed( status, "rtems_task_create of TA3" ); assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 | 0x8 ); #define TA4_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 1u) status = rtems_task_create( Task_name[ 4 ], TA4_PRIORITY, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 4 ] ); directive_failed( status, "rtems_task_create of TA4" ); assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 | 0x8 | 0x10 ); status = rtems_task_start( Task_id[ 1 ], Task_1, 0 ); directive_failed( status, "rtems_task_start of TA1" ); assert_extension_counts( &Task_started[ 0 ], 0x2 ); status = rtems_task_start( Task_id[ 2 ], Task_2, 0 ); directive_failed( status, "rtems_task_start of TA2" ); assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 ); status = rtems_task_start( Task_id[ 3 ], Task_3, 0 ); directive_failed( status, "rtems_task_start of TA3" ); assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 | 0x8 ); status = rtems_task_start( Task_id[ 4 ], Task_4, 0 ); directive_failed( status, "rtems_task_start of TA4" ); assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 | 0x8 | 0x10 ); status = rtems_task_restart( Task_id[ 2 ], 0 ); directive_failed( status, "rtems_task_restart of TA3" ); assert_extension_counts( &Task_restarted[ 0 ], 0x0 ); status = rtems_task_set_note( rtems_task_self(), RTEMS_NOTEPAD_4, 32 ); directive_failed( status, "task_set_node of Self id" ); printf( "INIT - rtems_task_set_note - set my (id) RTEMS_NOTEPAD_4 " ); puts ( "to TA1's priority: 04" ); status = rtems_task_set_note( RTEMS_SELF, RTEMS_NOTEPAD_4, 32 ); directive_failed( status, "task_set_node of Self 0" ); printf( "INIT - rtems_task_set_note - set my (SELF) RTEMS_NOTEPAD_4 " ); puts ( "to TA1's priority: 04" ); status = rtems_task_set_note( Task_id[ 1 ], RTEMS_NOTEPAD_8, 4 ); directive_failed( status, "task_set_node of TA1" ); printf( "INIT - rtems_task_set_note - set TA1's RTEMS_NOTEPAD_8 " ); puts ( "to TA1's priority: 04" ); status = rtems_task_set_note( Task_id[ 2 ], RTEMS_NOTEPAD_8, 4 ); directive_failed( status, "task_set_node of TA2" ); printf( "INIT - rtems_task_set_note - set TA2's RTEMS_NOTEPAD_8 " ); puts ( "to TA2's priority: 04"); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_mpci_entry Shm_Initialization( void ) { uint32_t i, all_initialized; uint32_t interrupt_cause, interrupt_value; void *interrupt_address; Shm_Node_status_control *nscb; uint32_t extension_id; /* for installation of MPCI_Fatal */ uint32_t remaining_memory; uint32_t local_node; local_node = _Configuration_MP_table->node; Shm_Get_configuration( local_node, &Shm_Configuration ); Shm_Interrupt_table = (Shm_Interrupt_information *) malloc( sizeof(Shm_Interrupt_information) * (SHM_MAXIMUM_NODES + 1) ); assert( Shm_Interrupt_table ); Shm_Receive_message_count = 0; Shm_Null_message_count = 0; Shm_Interrupt_count = 0; /* * Set the Node Status indicators */ Shm_Pending_initialization = Shm_Convert(rtems_build_name( 'P', 'E', 'N', 'D' )); Shm_Initialization_complete = Shm_Convert(rtems_build_name( 'C', 'O', 'M', 'P' )); Shm_Active_node = Shm_Convert(rtems_build_name( 'A', 'C', 'T', 'V' )); /* * Initialize the constants used by the Locked Queue code. */ Shm_Locked_queue_End_of_list = Shm_Convert( 0xffffffff ); Shm_Locked_queue_Not_on_list = Shm_Convert( 0xfffffffe ); /* * Set the base addresses for the: * + Node Status Table * + Free Pool and Receive Queues * + Envelopes */ Shm_Node_statuses = (Shm_Node_status_control *) START_NS_CBS; Shm_Locked_queues = (Shm_Locked_queue_Control *) START_LQ_CBS; Shm_Envelopes = (Shm_Envelope_control *) START_ENVELOPES; /* * Calculate the maximum number of envelopes which can be * placed the remaining shared memory. */ remaining_memory = ((void *)Shm_Configuration->base + Shm_Configuration->length) - ((void *)Shm_Envelopes); Shm_Maximum_envelopes = remaining_memory / sizeof( Shm_Envelope_control ); Shm_Maximum_envelopes -= 1; /* * Set the pointer to the receive queue for the local node. * When we receive a node, we will get it from here before * processing it. */ Shm_Local_receive_queue = &Shm_Locked_queues[ local_node ]; Shm_Local_node_status = &Shm_Node_statuses[ local_node ]; /* * Convert local interrupt cause information into the * neutral format so other nodes will be able to * understand it. */ interrupt_address = (void *) Shm_Convert( (uint32_t)Shm_Configuration->Intr.address ); interrupt_value = Shm_Convert( Shm_Configuration->Intr.value ); interrupt_cause = Shm_Convert( Shm_Configuration->Intr.length ); if ( Shm_Configuration->poll_intr == POLLED_MODE ) Shm_install_timer(); else Shm_setvec(); if ( Shm_Is_master_node() ) { /* * Zero out the shared memory area. */ (void) memset( (void *) Shm_Configuration->base, 0, Shm_Configuration->length ); /* * Initialize all of the locked queues (the free envelope * pool and a receive queue per node) and set all of the * node's status so they will be waiting to initialization * to complete. */ Shm_Locked_queue_Initialize( FREE_ENV_CB, FREE_ENV_POOL ); for ( i=SHM_FIRST_NODE ; i<=SHM_MAXIMUM_NODES ; i++ ) { Shm_Initialize_receive_queue( i ); Shm_Node_statuses[ i ].status = Shm_Pending_initialization; Shm_Node_statuses[ i ].error = 0; } /* * Initialize all of the envelopes and place them in the * free pool. */ for ( i=0 ; i<Shm_Maximum_envelopes ; i++ ) { Shm_Envelopes[ i ].index = Shm_Convert(i); Shm_Free_envelope( &Shm_Envelopes[ i ] ); } /* * Initialize this node's interrupt information in the * shared area so other nodes can interrupt us. */ Shm_Local_node_status->int_address = (uint32_t) interrupt_address; Shm_Local_node_status->int_value = interrupt_value; Shm_Local_node_status->int_length = interrupt_cause; Shm_Local_node_status->status = Shm_Initialization_complete; /* * Loop until all nodes have completed initialization. */ do { all_initialized = 1; for ( i = SHM_FIRST_NODE ; i <= SHM_MAXIMUM_NODES ; i++ ) if ( Shm_Node_statuses[ i ].status != Shm_Initialization_complete ) all_initialized = 0; } while ( all_initialized == 0 ); /* * Tell the other nodes we think that the system is up. */ for ( i = SHM_FIRST_NODE ; i <= SHM_MAXIMUM_NODES ; i++ ) Shm_Node_statuses[ i ].status = Shm_Active_node; } else { /* is not MASTER node */ /* * Initialize the node status for the non-master nodes. * Because the master node zeroes out memory, it is * necessary for them to keep putting their values in * the node status area until the master says they * should become active. */ Shm_Local_node_status->status = Shm_Pending_initialization; do { if ( Shm_Local_node_status->status == Shm_Pending_initialization ) { /* * Initialize this node's interrupt information in the * shared area so other nodes can interrupt us. */ Shm_Local_node_status->int_address = (uint32_t) interrupt_address; Shm_Local_node_status->int_value = interrupt_value; Shm_Local_node_status->int_length = interrupt_cause; Shm_Local_node_status->status = Shm_Initialization_complete; } } while ( Shm_Local_node_status->status != Shm_Active_node ) ; } /* * Initialize the Interrupt Information Table */ for ( i = SHM_FIRST_NODE ; i <= SHM_MAXIMUM_NODES ; i++ ) { nscb = &Shm_Node_statuses[ i ]; Shm_Interrupt_table[i].address = Shm_Convert_address( (void *)Shm_Convert(((vol_u32) nscb->int_address)) ); Shm_Interrupt_table[i].value = Shm_Convert( nscb->int_value ); Shm_Interrupt_table[i].length = Shm_Convert( nscb->int_length ); } MPCI_Shm_extensions.fatal = MPCI_Fatal; (void) rtems_extension_create( rtems_build_name( 'M', 'P', 'E', 'X' ), &MPCI_Shm_extensions, &extension_id ); }
static void test(void) { rtems_status_code sc; rtems_id id; master_task = rtems_task_self(); #ifdef BSP_INITIAL_EXTENSION sc = rtems_extension_create( rtems_build_name(' ', 'B', 'S', 'P'), &initial_bsp, &id ); assert(sc == RTEMS_SUCCESSFUL); #undef BSP_INITIAL_EXTENSION #endif sc = rtems_extension_create( rtems_build_name('T', 'E', 'S', 'T'), &initial_test, &id ); assert(sc == RTEMS_SUCCESSFUL); sc = rtems_extension_create( rtems_build_name('2', ' ', ' ', ' '), &two, &id ); assert(sc == RTEMS_SUCCESSFUL); sc = rtems_extension_create( rtems_build_name('3', ' ', ' ', ' '), &three, &id ); assert(sc == RTEMS_SUCCESSFUL); active_extensions = 4; assert(counter == 14); counter = 16; sc = rtems_task_create( rtems_build_name('W', 'O', 'R', 'K'), 2, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); assert(sc == RTEMS_SUCCESSFUL); sc = rtems_task_start(id, worker, 0); assert(sc == RTEMS_SUCCESSFUL); wait_for_worker(); sc = rtems_task_restart(id, 0); assert(sc == RTEMS_SUCCESSFUL); wait_for_worker(); sc = rtems_task_delete(id); assert(sc == RTEMS_SUCCESSFUL); /* Process zombies to trigger delete extensions */ sc = rtems_task_create( rtems_build_name('N', 'U', 'L', 'L'), 2, SIZE_MAX, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); assert(sc == RTEMS_UNSATISFIED); }
rtems_task Init( rtems_task_argument argument ) { rtems_status_code status; rtems_time_of_day time; puts( "\n\n*** CPU USAGE LIBRARY TEST ***" ); build_time( &time, 12, 31, 1988, 9, 15, 0, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); Extension_name[ 1 ] = rtems_build_name( 'E', 'X', 'T', ' ' ); status = rtems_extension_create( Extension_name[ 1 ], &Extensions, &Extension_id[ 1 ] ); directive_failed( status, "rtems_extension_create" ); Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); Run_count[ 1 ] = 0; Run_count[ 2 ] = 0; Run_count[ 3 ] = 0; status = rtems_task_create( Task_name[ 1 ], 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_TIMESLICE, RTEMS_FLOATING_POINT, &Task_id[ 1 ] ); directive_failed( status, "rtems_task_create of TA1" ); status = rtems_task_create( Task_name[ 2 ], 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_TIMESLICE, RTEMS_FLOATING_POINT, &Task_id[ 2 ] ); directive_failed( status, "rtems_task_create of TA2" ); status = rtems_task_create( Task_name[ 3 ], 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_TIMESLICE, RTEMS_FLOATING_POINT, &Task_id[ 3 ] ); directive_failed( status, "rtems_task_create of TA3" ); status = rtems_task_start( Task_id[ 1 ], Task_1, 0 ); directive_failed( status, "rtems_task_start of TA1" ); status = rtems_task_start( Task_id[ 2 ], Task_2, 0 ); directive_failed( status, "rtems_task_start of TA2" ); status = rtems_task_start( Task_id[ 3 ], Task_3, 0 ); directive_failed( status, "rtems_task_start of TA3" ); /* * We suspend the Init task rather than delete it so it still * shows up in CPU Usage Report. If we don't, the CPU Usage * times will not add up to the time since last CPU Usage Reset. */ status = rtems_task_suspend( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }