summaryrefslogtreecommitdiffstats
path: root/c/src/ada-tests
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1997-06-02 20:19:03 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1997-06-02 20:19:03 +0000
commit6d4e604be8b43c0555cd1c9531fe78ae199a1189 (patch)
treeadc303bfeaddf541a8f45ea1597f43bf8bf7a09d /c/src/ada-tests
parentChanged bitwise OR's used to build up option and attribute sets (diff)
downloadrtems-6d4e604be8b43c0555cd1c9531fe78ae199a1189.tar.bz2
Initial revision
Diffstat (limited to 'c/src/ada-tests')
-rw-r--r--c/src/ada-tests/mptests/mp01/mptest.adb235
-rw-r--r--c/src/ada-tests/mptests/mp01/mptest.ads165
-rw-r--r--c/src/ada-tests/mptests/mp01/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp01/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp02/mptest.adb213
-rw-r--r--c/src/ada-tests/mptests/mp02/mptest.ads165
-rw-r--r--c/src/ada-tests/mptests/mp02/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp02/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp03/mptest.adb277
-rw-r--r--c/src/ada-tests/mptests/mp03/mptest.ads215
-rw-r--r--c/src/ada-tests/mptests/mp03/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp03/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp04/mptest.adb169
-rw-r--r--c/src/ada-tests/mptests/mp04/mptest.ads179
-rw-r--r--c/src/ada-tests/mptests/mp04/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp04/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp05/mptest.adb252
-rw-r--r--c/src/ada-tests/mptests/mp05/mptest.ads244
-rw-r--r--c/src/ada-tests/mptests/mp05/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp05/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp06/mptest.adb257
-rw-r--r--c/src/ada-tests/mptests/mp06/mptest.ads251
-rw-r--r--c/src/ada-tests/mptests/mp06/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp06/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp07/mptest.adb210
-rw-r--r--c/src/ada-tests/mptests/mp07/mptest.ads211
-rw-r--r--c/src/ada-tests/mptests/mp07/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp07/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp08/mptest.adb207
-rw-r--r--c/src/ada-tests/mptests/mp08/mptest.ads193
-rw-r--r--c/src/ada-tests/mptests/mp08/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp08/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp09/mptest.adb381
-rw-r--r--c/src/ada-tests/mptests/mp09/mptest.ads255
-rw-r--r--c/src/ada-tests/mptests/mp09/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp09/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp10/mptest.adb301
-rw-r--r--c/src/ada-tests/mptests/mp10/mptest.ads225
-rw-r--r--c/src/ada-tests/mptests/mp10/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp10/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp11/mptest.adb138
-rw-r--r--c/src/ada-tests/mptests/mp11/mptest.ads185
-rw-r--r--c/src/ada-tests/mptests/mp11/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp11/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp12/mptest.adb152
-rw-r--r--c/src/ada-tests/mptests/mp12/mptest.ads183
-rw-r--r--c/src/ada-tests/mptests/mp12/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp12/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp13/mptest.adb328
-rw-r--r--c/src/ada-tests/mptests/mp13/mptest.ads207
-rw-r--r--c/src/ada-tests/mptests/mp13/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp13/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp14/mptest.adb764
-rw-r--r--c/src/ada-tests/mptests/mp14/mptest.ads348
-rw-r--r--c/src/ada-tests/mptests/mp14/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/mptests/mp14/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/samples/base_mp/mptest.adb108
-rw-r--r--c/src/ada-tests/samples/base_mp/mptest.ads167
-rw-r--r--c/src/ada-tests/samples/base_mp/node1/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/samples/base_mp/node2/mptest-per_node_configuration.adb43
-rw-r--r--c/src/ada-tests/samples/base_sp/sptest.adb98
-rw-r--r--c/src/ada-tests/samples/base_sp/sptest.ads115
-rw-r--r--c/src/ada-tests/samples/hello/sptest.adb52
-rw-r--r--c/src/ada-tests/samples/hello/sptest.ads90
-rw-r--r--c/src/ada-tests/samples/ticker/sptest.adb162
-rw-r--r--c/src/ada-tests/samples/ticker/sptest.ads115
-rw-r--r--c/src/ada-tests/sptests/sp01/sptest.adb162
-rw-r--r--c/src/ada-tests/sptests/sp01/sptest.ads115
-rw-r--r--c/src/ada-tests/sptests/sp02/sptest.adb331
-rw-r--r--c/src/ada-tests/sptests/sp02/sptest.ads154
-rw-r--r--c/src/ada-tests/sptests/sp03/sptest.adb173
-rw-r--r--c/src/ada-tests/sptests/sp03/sptest.ads129
-rw-r--r--c/src/ada-tests/sptests/sp04/sptest.adb311
-rw-r--r--c/src/ada-tests/sptests/sp04/sptest.ads187
-rw-r--r--c/src/ada-tests/sptests/sp05/sptest.adb229
-rw-r--r--c/src/ada-tests/sptests/sp05/sptest.ads139
-rw-r--r--c/src/ada-tests/sptests/sp06/sptest.adb222
-rw-r--r--c/src/ada-tests/sptests/sp06/sptest.ads146
-rw-r--r--c/src/ada-tests/sptests/sp07/sptest.adb486
-rw-r--r--c/src/ada-tests/sptests/sp07/sptest.ads240
-rw-r--r--c/src/ada-tests/sptests/sp08/sptest.adb351
-rw-r--r--c/src/ada-tests/sptests/sp08/sptest.ads129
-rw-r--r--c/src/ada-tests/sptests/sp09/sptest.adb3151
-rw-r--r--c/src/ada-tests/sptests/sp09/sptest.ads444
-rw-r--r--c/src/ada-tests/sptests/sp11/sptest.adb900
-rw-r--r--c/src/ada-tests/sptests/sp11/sptest.ads233
-rw-r--r--c/src/ada-tests/sptests/sp12/sptest.adb806
-rw-r--r--c/src/ada-tests/sptests/sp12/sptest.ads197
-rw-r--r--c/src/ada-tests/sptests/sp13/sptest.adb673
-rw-r--r--c/src/ada-tests/sptests/sp13/sptest.ads174
-rw-r--r--c/src/ada-tests/sptests/sp14/sptest.adb329
-rw-r--r--c/src/ada-tests/sptests/sp14/sptest.ads186
-rw-r--r--c/src/ada-tests/sptests/sp15/sptest.adb284
-rw-r--r--c/src/ada-tests/sptests/sp15/sptest.ads173
-rw-r--r--c/src/ada-tests/sptests/sp16/sptest.adb686
-rw-r--r--c/src/ada-tests/sptests/sp16/sptest.ads250
-rw-r--r--c/src/ada-tests/sptests/sp17/sptest.adb173
-rw-r--r--c/src/ada-tests/sptests/sp17/sptest.ads148
-rw-r--r--c/src/ada-tests/sptests/sp19/sptest.ads157
-rw-r--r--c/src/ada-tests/sptests/sp20/sptest.adb282
-rw-r--r--c/src/ada-tests/sptests/sp20/sptest.ads160
-rw-r--r--c/src/ada-tests/sptests/sp21/sptest.adb270
-rw-r--r--c/src/ada-tests/sptests/sp21/sptest.ads141
-rw-r--r--c/src/ada-tests/sptests/sp22/sptest.adb299
-rw-r--r--c/src/ada-tests/sptests/sp22/sptest.ads147
-rw-r--r--c/src/ada-tests/sptests/sp23/sptest.adb179
-rw-r--r--c/src/ada-tests/sptests/sp23/sptest.ads173
-rw-r--r--c/src/ada-tests/sptests/sp24/sptest.adb171
-rw-r--r--c/src/ada-tests/sptests/sp24/sptest.ads137
-rw-r--r--c/src/ada-tests/sptests/sp25/sptest.adb368
-rw-r--r--c/src/ada-tests/sptests/sp25/sptest.ads158
-rw-r--r--c/src/ada-tests/sptests/spsize/sptest.adb199
-rw-r--r--c/src/ada-tests/sptests/spsize/sptest.ads111
-rw-r--r--c/src/ada-tests/tmtests/tm01/tmtest.adb274
-rw-r--r--c/src/ada-tests/tmtests/tm01/tmtest.ads106
-rw-r--r--c/src/ada-tests/tmtests/tm02/tmtest.adb208
-rw-r--r--c/src/ada-tests/tmtests/tm02/tmtest.ads141
-rw-r--r--c/src/ada-tests/tmtests/tm03/tmtest.adb193
-rw-r--r--c/src/ada-tests/tmtests/tm03/tmtest.ads133
-rw-r--r--c/src/ada-tests/tmtests/tm04/tmtest.adb500
-rw-r--r--c/src/ada-tests/tmtests/tm04/tmtest.ads199
-rw-r--r--c/src/ada-tests/tmtests/tm05/tmtest.adb174
-rw-r--r--c/src/ada-tests/tmtests/tm05/tmtest.ads151
-rw-r--r--c/src/ada-tests/tmtests/tm06/tmtest.adb210
-rw-r--r--c/src/ada-tests/tmtests/tm06/tmtest.ads142
-rw-r--r--c/src/ada-tests/tmtests/tm07/tmtest.adb179
-rw-r--r--c/src/ada-tests/tmtests/tm07/tmtest.ads149
-rw-r--r--c/src/ada-tests/tmtests/tm08/tmtest.adb341
-rw-r--r--c/src/ada-tests/tmtests/tm08/tmtest.ads137
-rw-r--r--c/src/ada-tests/tmtests/tm09/tmtest.adb295
-rw-r--r--c/src/ada-tests/tmtests/tm09/tmtest.ads125
-rw-r--r--c/src/ada-tests/tmtests/tm10/tmtest.adb218
-rw-r--r--c/src/ada-tests/tmtests/tm10/tmtest.ads142
-rw-r--r--c/src/ada-tests/tmtests/tm11/tmtest.adb211
-rw-r--r--c/src/ada-tests/tmtests/tm11/tmtest.ads139
-rw-r--r--c/src/ada-tests/tmtests/tm12/tmtest.adb208
-rw-r--r--c/src/ada-tests/tmtests/tm12/tmtest.ads130
-rw-r--r--c/src/ada-tests/tmtests/tm13/tmtest.adb209
-rw-r--r--c/src/ada-tests/tmtests/tm13/tmtest.ads139
-rw-r--r--c/src/ada-tests/tmtests/tm14/tmtest.adb211
-rw-r--r--c/src/ada-tests/tmtests/tm14/tmtest.ads130
-rw-r--r--c/src/ada-tests/tmtests/tm15/tmtest.adb276
-rw-r--r--c/src/ada-tests/tmtests/tm15/tmtest.ads147
-rw-r--r--c/src/ada-tests/tmtests/tm16/tmtest.adb197
-rw-r--r--c/src/ada-tests/tmtests/tm16/tmtest.ads149
-rw-r--r--c/src/ada-tests/tmtests/tm17/tmtest.adb160
-rw-r--r--c/src/ada-tests/tmtests/tm17/tmtest.ads147
-rw-r--r--c/src/ada-tests/tmtests/tm18/tmtest.adb154
-rw-r--r--c/src/ada-tests/tmtests/tm18/tmtest.ads135
-rw-r--r--c/src/ada-tests/tmtests/tm19/tmtest.adb287
-rw-r--r--c/src/ada-tests/tmtests/tm19/tmtest.ads182
-rw-r--r--c/src/ada-tests/tmtests/tm20/tmtest.adb588
-rw-r--r--c/src/ada-tests/tmtests/tm20/tmtest.ads206
-rw-r--r--c/src/ada-tests/tmtests/tm21/tmtest.adb300
-rw-r--r--c/src/ada-tests/tmtests/tm21/tmtest.ads160
-rw-r--r--c/src/ada-tests/tmtests/tm22/tmtest.adb249
-rw-r--r--c/src/ada-tests/tmtests/tm22/tmtest.ads144
-rw-r--r--c/src/ada-tests/tmtests/tm23/tmtest.adb399
-rw-r--r--c/src/ada-tests/tmtests/tm23/tmtest.ads168
-rw-r--r--c/src/ada-tests/tmtests/tm24/tmtest.adb165
-rw-r--r--c/src/ada-tests/tmtests/tm24/tmtest.ads137
-rw-r--r--c/src/ada-tests/tmtests/tm25/tmtest.adb156
-rw-r--r--c/src/ada-tests/tmtests/tm25/tmtest.ads118
-rw-r--r--c/src/ada-tests/tmtests/tm26/tmtest.ads227
-rw-r--r--c/src/ada-tests/tmtests/tm27/tmtest.adb268
-rw-r--r--c/src/ada-tests/tmtests/tm27/tmtest.ads169
-rw-r--r--c/src/ada-tests/tmtests/tm28/tmtest.adb176
-rw-r--r--c/src/ada-tests/tmtests/tm28/tmtest.ads144
-rw-r--r--c/src/ada-tests/tmtests/tm29/tmtest.adb234
-rw-r--r--c/src/ada-tests/tmtests/tm29/tmtest.ads134
-rw-r--r--c/src/ada-tests/tmtests/tmck/tmtest.adb220
-rw-r--r--c/src/ada-tests/tmtests/tmck/tmtest.ads135
-rw-r--r--c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb876
-rw-r--r--c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads520
-rw-r--r--c/src/ada-tests/tmtests/tmoverhd/tmtest.adb1565
-rw-r--r--c/src/ada-tests/tmtests/tmoverhd/tmtest.ads180
176 files changed, 39236 insertions, 0 deletions
diff --git a/c/src/ada-tests/mptests/mp01/mptest.adb b/c/src/ada-tests/mptests/mp01/mptest.adb
new file mode 100644
index 0000000000..6d0f1ab3bb
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp01/mptest.adb
@@ -0,0 +1,235 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 1 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:38:33 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ C : RTEMS.CHARACTER;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 1 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE /= 1 then
+ C := 'S';
+ else
+ C := 'M';
+ end if;
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( C, 'A', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( C, 'A', '2', ' ' );
+ MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( C, 'A', '3', ' ' );
+
+ TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ TEXT_IO.PUT_LINE( "Creating task 1 (Global)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ TEXT_IO.PUT_LINE( "Creating task 2 (Global)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ TEXT_IO.PUT_LINE( "Creating task 3 (Local)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 3 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 2 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 3 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ TID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TEST_SUPPORT.PUT_NAME(
+ MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+ FALSE
+ );
+
+ TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_WAKE_AFTER(
+ TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
+ TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TEST_SUPPORT.PUT_NAME(
+ MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+ FALSE
+ );
+
+ TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ if TEST_SUPPORT.TASK_NUMBER( TID ) = 1 then -- TASK 1
+
+ TEST_SUPPORT.PUT_NAME(
+ MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+ FALSE
+ );
+
+ TEXT_IO.PUT_LINE( " - deleting self" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ else if TEST_SUPPORT.TASK_NUMBER( TID ) = 2 then -- TASK 2
+
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), FALSE );
+ TEXT_IO.PUT( " - waiting to be deleted by " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), TRUE );
+
+ loop
+ TEST_SUPPORT.DO_NOTHING; -- can't be optimized away
+ end loop;
+
+ else -- TASK 3
+
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
+ TEXT_IO.PUT( " - getting TID of " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
+
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( 2 ),
+ RTEMS.SEARCH_ALL_NODES,
+ TID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
+
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
+ TEXT_IO.PUT( " - deleting " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
+
+ RTEMS.TASK_DELETE( TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ end if;
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp01/mptest.ads b/c/src/ada-tests/mptests/mp01/mptest.ads
new file mode 100644
index 0000000000..f19397445f
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp01/mptest.ads
@@ -0,0 +1,165 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:38:34 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.GLOBAL, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 33, -- maximum # global objects
+ 33 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp01/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp01/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..33eca27654
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp01/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:32:29 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp01/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp01/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..c998792efd
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp01/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:32:41 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp02/mptest.adb b/c/src/ada-tests/mptests/mp02/mptest.adb
new file mode 100644
index 0000000000..0307c3c20b
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp02/mptest.adb
@@ -0,0 +1,213 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 2 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:38:41 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 2 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ TEXT_IO.PUT_LINE( "Creating test task (Global)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ 1,
+ 2048,
+ RTEMS.NO_PREEMPT,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ TEST_TID : RTEMS.ID;
+ REMOTE_TID : RTEMS.ID;
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+ NOTE : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ REMOTE_NODE := 2;
+ else
+ REMOTE_NODE := 1;
+ end if;
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task (all nodes)" );
+
+ loop
+
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ --
+ -- We just got this ID above so looping is not necessary.
+ --
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task (1 node)" );
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( REMOTE_NODE ),
+ REMOTE_NODE,
+ TEST_TID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT" );
+
+ if TEST_TID /= REMOTE_TID then
+ TEXT_IO.PUT_LINE( "task_ident tid's do not match!!" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
+ "task_delete of remote task"
+ );
+ TEXT_IO.PUT_LINE(
+ "task_delete of remote task returned the correct error"
+ );
+
+ RTEMS.TASK_START( REMOTE_TID, MPTEST.TEST_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
+ "task_start of remote task"
+ );
+ TEXT_IO.PUT_LINE(
+ "task_start of remote task returned the correct error"
+ );
+
+ RTEMS.TASK_RESTART( REMOTE_TID, 0, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
+ "task_restart of remote task"
+ );
+ TEXT_IO.PUT_LINE(
+ "task_restart of remote task returned the correct error"
+ );
+
+
+ TEXT_IO.PUT( "Setting notepad " );
+ UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
+ TEXT_IO.PUT( " of the remote task to " );
+ UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_SET_NOTE(
+ REMOTE_TID,
+ RTEMS.GET_NODE( TID ),
+ RTEMS.GET_NODE( TID ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
+
+ TEXT_IO.PUT_LINE( "Getting a notepad of the remote task" );
+ RTEMS.TASK_GET_NOTE(
+ REMOTE_TID,
+ RTEMS.GET_NODE( TID ),
+ NOTE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
+
+ if NOTE = RTEMS.GET_NODE( TID ) then
+ TEXT_IO.PUT_LINE( "Remote notepad set and read correctly" );
+ else
+ TEXT_IO.PUT(
+ "FAILURE!!! Remote notepad was not set and read correctly ("
+ );
+ UNSIGNED32_IO.PUT( NOTE );
+ TEXT_IO.PUT( ", " );
+ UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ) );
+ TEXT_IO.PUT_LINE( ")" );
+
+ end if;
+
+ RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
+ TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp02/mptest.ads b/c/src/ada-tests/mptests/mp02/mptest.ads
new file mode 100644
index 0000000000..13a7c92552
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp02/mptest.ads
@@ -0,0 +1,165 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 2 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:38:42 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp02/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp02/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..c3abb62da5
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp02/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:32:48 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp02/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp02/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..1efdccce9a
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp02/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:01 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp03/mptest.adb b/c/src/ada-tests/mptests/mp03/mptest.adb
new file mode 100644
index 0000000000..d86f3afa74
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp03/mptest.adb
@@ -0,0 +1,277 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 3 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:38:49 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 3 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ 1,
+ 2048,
+ RTEMS.NO_PREEMPT,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+ RTEMS.TIMER_CREATE(
+ MPTEST.TIMER_NAME( 1 ),
+ MPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- DELAYED_SEND_EVENT
+--
+
+ procedure DELAYED_SEND_EVENT (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( MPTEST.TASK_ID( 1 ), RTEMS.EVENT_16, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
+
+ end DELAYED_SEND_EVENT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task" );
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ MPTEST.REMOTE_NODE := 2;
+ else
+ MPTEST.REMOTE_NODE := 1;
+ end if;
+
+ TEXT_IO.PUT( "Remote task's name is : " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
+
+ loop
+
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.TIMER_ID( 1 ),
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ MPTEST.DELAYED_SEND_EVENT'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ MPTEST.TEST_TASK_SUPPORT( 1 );
+
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.TIMER_ID( 1 ),
+ 11 * TEST_SUPPORT.TICKS_PER_SECOND,
+ MPTEST.DELAYED_SEND_EVENT'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
+
+ RTEMS.TASK_WAKE_AFTER(
+ 2 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end if;
+
+ MPTEST.TEST_TASK_SUPPORT( 2 );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+--PAGE
+--
+-- TEST_TASK_SUPPORT
+--
+
+
+ procedure TEST_TASK_SUPPORT (
+ NODE : in RTEMS.UNSIGNED32
+ ) is
+ EVENTS : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = NODE then
+
+ loop
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ EVENTS,
+ STATUS
+ );
+
+ exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
+
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "EVENT_RECEIVE"
+ );
+
+ RTEMS.TASK_WAKE_AFTER(
+ 2 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
+ TEXT_IO.PUT_LINE( " - Suspending remote task" );
+ RTEMS.TASK_SUSPEND( MPTEST.REMOTE_TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ RTEMS.TASK_WAKE_AFTER(
+ 2 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
+ TEXT_IO.PUT_LINE( " - Resuming remote task" );
+
+ RTEMS.TASK_RESUME( MPTEST.REMOTE_TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
+
+ end loop;
+
+ else
+
+ loop
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ EVENTS,
+ STATUS
+ );
+
+ exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
+
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "EVENT_RECEIVE"
+ );
+
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( REMOTE_NODE ), FALSE );
+ TEXT_IO.PUT_LINE( " - have I been suspended???" );
+ RTEMS.TASK_WAKE_AFTER(
+ TEST_SUPPORT.TICKS_PER_SECOND / 2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end loop;
+
+ end if;
+
+ end TEST_TASK_SUPPORT;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp03/mptest.ads b/c/src/ada-tests/mptests/mp03/mptest.ads
new file mode 100644
index 0000000000..c8bece6af5
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp03/mptest.ads
@@ -0,0 +1,215 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 3 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:38:50 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- DELAYED_SEND_EVENT
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a timer service routine which sends an
+-- event set to a waiting task.
+--
+
+ procedure DELAYED_SEND_EVENT (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK_SUPPORT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs the bulk of the test. Based on the NODE
+-- specified, this subprogram loops suspending/resuming a remote task
+-- or waiting for itself to be suspended/resumed.
+--
+
+ procedure TEST_TASK_SUPPORT (
+ NODE : in RTEMS.UNSIGNED32
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp03/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp03/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..f82dc5212f
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp03/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:05 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp03/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp03/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..27631265e6
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp03/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:16 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp04/mptest.adb b/c/src/ada-tests/mptests/mp04/mptest.adb
new file mode 100644
index 0000000000..95f51ec9b2
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp04/mptest.adb
@@ -0,0 +1,169 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 4 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:38:59 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 4 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ PREVIOUS_PRIORITY_1 : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task" );
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ MPTEST.REMOTE_NODE := 2;
+ else
+ MPTEST.REMOTE_NODE := 1;
+ end if;
+
+ TEXT_IO.PUT( "Remote task's name is : " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
+
+ loop
+
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ RTEMS.TASK_SET_PRIORITY(
+ MPTEST.REMOTE_TID,
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ if PREVIOUS_PRIORITY /= MPTEST.REMOTE_NODE then
+
+ TEXT_IO.PUT( "Remote priority (0x" );
+ UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY, BASE => 16 );
+ TEXT_IO.PUT( "does not match remote node (0x" );
+ UNSIGNED32_IO.PUT( MPTEST.REMOTE_NODE, BASE => 16 );
+ TEXT_IO.PUT_LINE( ")!!!" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 16#F00000# );
+
+ end if;
+
+ loop
+
+ RTEMS.TASK_SET_PRIORITY(
+ RTEMS.SELF,
+ RTEMS.CURRENT_PRIORITY,
+ PREVIOUS_PRIORITY_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ exit when PREVIOUS_PRIORITY_1 = MPTEST.REMOTE_NODE;
+
+ end loop;
+
+
+ TEXT_IO.PUT_LINE( "Local task priority has been set" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 4 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp04/mptest.ads b/c/src/ada-tests/mptests/mp04/mptest.ads
new file mode 100644
index 0000000000..7afbac328a
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp04/mptest.ads
@@ -0,0 +1,179 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 4 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:38:59 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp04/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp04/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..8c3c5193ba
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp04/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:20 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp04/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp04/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..2d8c65f4b3
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp04/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:31 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp05/mptest.adb b/c/src/ada-tests/mptests/mp05/mptest.adb
new file mode 100644
index 0000000000..3ca7689ce9
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp05/mptest.adb
@@ -0,0 +1,252 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 5 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:39:06 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 5 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+ MPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
+
+ RTEMS.TIMER_CREATE(
+ MPTEST.TIMER_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PROCESS_ASR
+--
+
+ procedure PROCESS_ASR (
+ SIGNAL : in RTEMS.SIGNAL_SET
+ )
+ is
+ begin
+
+ if SIGNAL /= MPTEST.EXPECTED_SIGNAL then
+
+ TEXT_IO.PUT( "ERROR: I was expecting signal 0x" );
+ UNSIGNED32_IO.PUT( EXPECTED_SIGNAL, BASE => 16 );
+ TEXT_IO.PUT( " got 0x" );
+ UNSIGNED32_IO.PUT( SIGNAL, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.FATAL_ERROR_OCCURRED( 16#000F_0000# );
+
+ end if;
+
+ MPTEST.SIGNAL_CAUGHT := TRUE;
+
+ end PROCESS_ASR;
+
+--PAGE
+--
+-- STOP_TEST_TSR
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ MPTEST.STOP_TEST := TRUE;
+
+ end STOP_TEST_TSR;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ MPTEST.STOP_TEST := FALSE;
+
+ MPTEST.SIGNAL_CAUGHT := FALSE;
+ MPTEST.SIGNAL_COUNT := 0;
+
+ TEXT_IO.PUT_LINE( "signal_catch: initializing signal catcher" );
+ RTEMS.SIGNAL_CATCH(
+ MPTEST.PROCESS_ASR'ACCESS,
+ RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ MPTEST.REMOTE_NODE := 2;
+ MPTEST.REMOTE_SIGNAL := RTEMS.SIGNAL_18;
+ MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_17;
+ else
+ MPTEST.REMOTE_NODE := 1;
+ MPTEST.REMOTE_SIGNAL := RTEMS.SIGNAL_17;
+ MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_18;
+ end if;
+
+ TEXT_IO.PUT( "Remote task's name is : " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task" );
+ loop
+
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.TIMER_ID( 1 ),
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ MPTEST.STOP_TEST_TSR'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Sending signal to remote task" );
+ loop
+ RTEMS.SIGNAL_SEND(
+ MPTEST.REMOTE_TID,
+ MPTEST.REMOTE_SIGNAL,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ exit when not RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.NOT_DEFINED );
+
+ end loop;
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
+
+ end if;
+
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ if MPTEST.SIGNAL_CAUGHT = TRUE then
+
+ MPTEST.SIGNAL_CAUGHT := FALSE;
+ MPTEST.SIGNAL_COUNT := MPTEST.SIGNAL_COUNT + 1;
+
+ if MPTEST.SIGNAL_COUNT >= MPTEST.SIGNALS_PER_DOT then
+
+ MPTEST.SIGNAL_COUNT := 0;
+
+ TEST_SUPPORT.PUT_DOT( "." );
+
+ end if;
+
+ RTEMS.SIGNAL_SEND(
+ MPTEST.REMOTE_TID,
+ MPTEST.REMOTE_SIGNAL,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
+
+ end if;
+
+ end loop;
+
+ TEXT_IO.NEW_LINE;
+ TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp05/mptest.ads b/c/src/ada-tests/mptests/mp05/mptest.ads
new file mode 100644
index 0000000000..9706506d08
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp05/mptest.ads
@@ -0,0 +1,244 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 5 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:39:07 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable is set when the test should stop executing.
+--
+ STOP_TEST : RTEMS.BOOLEAN;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- This is the signal set which is sent to the task on the other node.
+--
+
+ REMOTE_SIGNAL : RTEMS.SIGNAL_SET;
+
+--
+-- This is the signal set the task on this node expects to receive
+-- from the other node.
+--
+
+ EXPECTED_SIGNAL : RTEMS.SIGNAL_SET;
+
+--
+-- These keep track of if a signal set has been caught and how many
+-- signal sets have been caught cumulative.
+--
+
+ SIGNAL_CAUGHT : RTEMS.BOOLEAN;
+ SIGNAL_COUNT : RTEMS.UNSIGNED32;
+
+--
+-- The number of signals to process per dot printed out.
+--
+
+ SIGNALS_PER_DOT : constant RTEMS.UNSIGNED32 := 15;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PROCESS_ASR
+--
+-- DESCRIPTION:
+--
+-- This subprogram is an ASR for TEST_TASK.
+--
+
+ procedure PROCESS_ASR (
+ SIGNAL : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- STOP_TEST_TSR
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a TSR which sets the "stop test" flag.
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 2, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp05/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp05/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..eb87437c43
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp05/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:35 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp05/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp05/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..c36a6eddea
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp05/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:45 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp06/mptest.adb b/c/src/ada-tests/mptests/mp06/mptest.adb
new file mode 100644
index 0000000000..b837015d29
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp06/mptest.adb
@@ -0,0 +1,257 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 6 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:39:14 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 6 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+ MPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
+
+ RTEMS.TIMER_CREATE(
+ MPTEST.TIMER_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- STOP_TEST_TSR
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED1 : in RTEMS.ID;
+ IGNORED2 : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ MPTEST.STOP_TEST := TRUE;
+
+ end STOP_TEST_TSR;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ EVENT_OUT : RTEMS.EVENT_SET;
+ EVENT_FOR_THIS_ITERATION : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ MPTEST.STOP_TEST := FALSE;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ MPTEST.REMOTE_NODE := 2;
+ else
+ MPTEST.REMOTE_NODE := 1;
+ end if;
+
+ TEXT_IO.PUT( "Remote task's name is : " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task" );
+
+ loop
+
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ TEXT_IO.PUT_LINE( "Sending events to remote task" );
+ else
+ TEXT_IO.PUT_LINE( "Receiving events from remote task" );
+ end if;
+
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.TIMER_ID( 1 ),
+ 5 * TEST_SUPPORT.TICKS_PER_SECOND,
+ MPTEST.STOP_TEST_TSR'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ COUNT := 0;
+
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ EVENT_FOR_THIS_ITERATION :=
+ MPTEST.EVENT_SET_TABLE(
+ INTEGER( COUNT ) mod MPTEST.EVENT_SET_TABLE'LAST + 1
+ );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ RTEMS.EVENT_SEND(
+ MPTEST.REMOTE_TID,
+ EVENT_FOR_THIS_ITERATION,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
+
+ else
+
+ RTEMS.EVENT_RECEIVE(
+ EVENT_FOR_THIS_ITERATION,
+ RTEMS.DEFAULT_OPTIONS,
+ 1 * TEST_SUPPORT.TICKS_PER_SECOND,
+ EVENT_OUT,
+ STATUS
+ );
+
+ if RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ) then
+ TEXT_IO.NEW_LINE( 1 );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
+ TEXT_IO.PUT_LINE(
+ "Correct behavior if the other node exitted."
+ );
+ else
+ TEXT_IO.PUT_LINE(
+ "ERROR... node 1 died"
+ );
+ end if;
+
+ exit;
+
+ else
+
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
+
+ end if;
+
+ end if;
+
+ if (COUNT mod MPTEST.MAXIMUM_DOTS) = 0 then
+
+ TEST_SUPPORT.PUT_DOT( "." );
+
+ end if;
+
+ COUNT := COUNT + 1;
+
+ end loop;
+
+ TEXT_IO.NEW_LINE;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ 1 * TEST_SUPPORT.TICKS_PER_SECOND,
+ EVENT_OUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ RTEMS.TIMEOUT,
+ STATUS,
+ "EVENT_RECEIVE"
+ );
+
+ TEXT_IO.NEW_LINE;
+ TEXT_IO.PUT_LINE( "event_receive - correctly returned TIMEOUT" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 6 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp06/mptest.ads b/c/src/ada-tests/mptests/mp06/mptest.ads
new file mode 100644
index 0000000000..3bb33b1590
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp06/mptest.ads
@@ -0,0 +1,251 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 6 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:39:15 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable is set when the test should stop executing.
+--
+ STOP_TEST : RTEMS.BOOLEAN;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- The number of signals to process per dot printed out.
+--
+
+ MAXIMUM_DOTS : constant RTEMS.UNSIGNED32 := 25;
+
+--
+-- The following is a table of the event sets which consist of
+-- a single event. This test cycles through all of these
+-- events.
+--
+
+ EVENT_SET_TABLE : constant array ( 0 .. 30 ) of RTEMS.EVENT_SET := (
+ RTEMS.EVENT_0,
+ RTEMS.EVENT_1,
+ RTEMS.EVENT_2,
+ RTEMS.EVENT_3,
+ RTEMS.EVENT_4,
+ RTEMS.EVENT_5,
+ RTEMS.EVENT_6,
+ RTEMS.EVENT_7,
+ RTEMS.EVENT_8,
+ RTEMS.EVENT_9,
+ RTEMS.EVENT_10,
+ RTEMS.EVENT_11,
+ RTEMS.EVENT_12,
+ RTEMS.EVENT_13,
+ RTEMS.EVENT_14,
+ RTEMS.EVENT_15,
+ RTEMS.EVENT_16,
+ RTEMS.EVENT_17,
+ RTEMS.EVENT_18,
+ RTEMS.EVENT_19,
+ RTEMS.EVENT_20,
+ RTEMS.EVENT_21,
+ RTEMS.EVENT_22,
+ RTEMS.EVENT_23,
+ RTEMS.EVENT_24,
+ RTEMS.EVENT_25,
+ RTEMS.EVENT_26,
+ RTEMS.EVENT_27,
+ RTEMS.EVENT_28,
+ RTEMS.EVENT_29,
+ RTEMS.EVENT_30
+ );
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- STOP_TEST_TSR
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a TSR which sets the "stop test" flag.
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED1 : in RTEMS.ID;
+ IGNORED2 : in RTEMS.ADDRESS
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 2, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp06/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp06/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..d99d94e252
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp06/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:49 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp06/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp06/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..7990910c07
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp06/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:00 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp07/mptest.adb b/c/src/ada-tests/mptests/mp07/mptest.adb
new file mode 100644
index 0000000000..40cea9bf27
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp07/mptest.adb
@@ -0,0 +1,210 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 7 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:39:22 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 7 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+ RTEMS.TIMER_CREATE(
+ MPTEST.TIMER_NAME( 1 ),
+ MPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- STOP_TEST_TSR
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED1 : in RTEMS.ID;
+ IGNORED2 : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ MPTEST.STOP_TEST := TRUE;
+
+ end STOP_TEST_TSR;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ EVENT_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ MPTEST.STOP_TEST := FALSE;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ MPTEST.REMOTE_NODE := 2;
+ else
+ MPTEST.REMOTE_NODE := 1;
+ end if;
+
+ TEXT_IO.PUT( "Remote task's name is : " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task" );
+ loop
+ RTEMS.TASK_IDENT(
+ MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.SUCCESSFUL );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Sending first event to remote task" );
+ RTEMS.EVENT_SEND(
+ MPTEST.REMOTE_TID,
+ RTEMS.EVENT_16,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
+
+ end if;
+
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.TIMER_ID( 1 ),
+ 5 * TEST_SUPPORT.TICKS_PER_SECOND,
+ MPTEST.STOP_TEST_TSR'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ for COUNT in 1 .. MPTEST.PER_DOT
+ loop
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ TEST_SUPPORT.TICKS_PER_SECOND,
+ EVENT_OUT,
+ STATUS
+ );
+ if RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ) then
+ TEXT_IO.NEW_LINE;
+ TEXT_IO.PUT_LINE(
+ "TA1 - TIMEOUT .. probably OK if the other node exits"
+ );
+ exit;
+ else
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
+ end if;
+
+ RTEMS.EVENT_SEND(
+ MPTEST.REMOTE_TID,
+ RTEMS.EVENT_16,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "." );
+
+ end loop;
+
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 7 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp07/mptest.ads b/c/src/ada-tests/mptests/mp07/mptest.ads
new file mode 100644
index 0000000000..2a793db21d
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp07/mptest.ads
@@ -0,0 +1,211 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 7 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:39:23 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable is set when the test should stop executing.
+--
+ STOP_TEST : RTEMS.BOOLEAN;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- The number of events to process per dot printed out.
+--
+
+ PER_DOT : constant RTEMS.UNSIGNED32 := 100;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- STOP_TEST_TSR
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a TSR which sets the "stop test" flag.
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED1 : in RTEMS.ID;
+ IGNORED2 : in RTEMS.ADDRESS
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 2, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp07/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp07/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..786d1d8d68
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp07/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:05 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp07/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp07/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..9d463f0002
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp07/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:15 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp08/mptest.adb b/c/src/ada-tests/mptests/mp08/mptest.adb
new file mode 100644
index 0000000000..306c5f0caf
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp08/mptest.adb
@@ -0,0 +1,207 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 8 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:39:34 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 8 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Creating Semaphore(Global)" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.GLOBAL,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ DOTS : RTEMS.UNSIGNED32;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
+ loop
+
+ RTEMS.SEMAPHORE_IDENT(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
+
+ RTEMS.SEMAPHORE_DELETE(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
+ "SEMAPHORE_DELETE"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "semaphore_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT"
+ );
+
+ end if;
+
+ COUNT := 0;
+
+ loop
+
+ TEST_SUPPORT.PUT_DOT( "p" );
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ if not RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.OBJECT_WAS_DELETED,
+ "SEMAPHORE_OBTAIN"
+ );
+
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "Global semaphore deleted" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end if;
+
+ COUNT := COUNT + 1;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 and then
+ COUNT >= 1000 then
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "Deleting global semaphore" );
+
+ RTEMS.SEMAPHORE_DELETE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end if;
+
+ TEST_SUPPORT.PUT_DOT( "v" );
+
+ RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
+
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
+
+ end loop;
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp08/mptest.ads b/c/src/ada-tests/mptests/mp08/mptest.ads
new file mode 100644
index 0000000000..81650d5799
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp08/mptest.ads
@@ -0,0 +1,193 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 8 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:39:38 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphores created
+-- by this test.
+--
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- The number of events to process per dot printed out.
+--
+
+ PER_DOT : constant RTEMS.UNSIGNED32 := 100;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp08/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp08/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..c68217932a
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp08/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:19 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp08/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp08/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..8585d960fd
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp08/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:30 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp09/mptest.adb b/c/src/ada-tests/mptests/mp09/mptest.adb
new file mode 100644
index 0000000000..cdfc4734d2
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp09/mptest.adb
@@ -0,0 +1,381 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 9 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:39:46 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 9 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.RECEIVE_BUFFER :=
+ RTEMS.TO_BUFFER_POINTER( MPTEST.RECEIVE_BUFFER_AREA'ADDRESS );
+
+ MPTEST.BUFFER_1 :=
+ RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_1'ADDRESS );
+
+ MPTEST.BUFFER_2 :=
+ RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_2'ADDRESS );
+
+ MPTEST.BUFFER_3 :=
+ RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_3'ADDRESS );
+
+ MPTEST.BUFFER_4 :=
+ RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_4'ADDRESS );
+
+ MPTEST.FILL_BUFFER( "123456789012345 ", MPTEST.BUFFER_AREA_1 );
+ MPTEST.FILL_BUFFER( "abcdefghijklmno ", MPTEST.BUFFER_AREA_2 );
+ MPTEST.FILL_BUFFER( "ABCDEFGHIJKLMNO ", MPTEST.BUFFER_AREA_3 );
+ MPTEST.FILL_BUFFER( "PQRSTUVWXYZ(){} ", MPTEST.BUFFER_AREA_4 );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ MPTEST.QUEUE_NAME( 1 ),
+ 3,
+ RTEMS.GLOBAL + RTEMS.LIMIT,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Creating Test_task (local)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task (local)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- SEND_MESSAGES
+--
+
+ procedure SEND_MESSAGES is
+ BROADCAST_COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "message_queue_send : " );
+ MPTEST.PUT_BUFFER( MPTEST.BUFFER_AREA_1 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFER_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE( "Delaying for a second" );
+ RTEMS.TASK_WAKE_AFTER(
+ 1 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT( "message_queue_urgent : " );
+ MPTEST.PUT_BUFFER( MPTEST.BUFFER_AREA_2 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFER_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+ TEXT_IO.PUT_LINE( "Delaying for a second" );
+ RTEMS.TASK_WAKE_AFTER(
+ 1 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT( "message_queue_broadcast : " );
+ MPTEST.PUT_BUFFER( MPTEST.BUFFER_AREA_3 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.MESSAGE_QUEUE_BROADCAST(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFER_3,
+ BROADCAST_COUNT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
+
+ TEXT_IO.PUT_LINE( "Delaying for a second" );
+ RTEMS.TASK_WAKE_AFTER(
+ 1 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end SEND_MESSAGES;
+
+--PAGE
+--
+-- RECEIVE_MESSAGES
+--
+
+ procedure RECEIVE_MESSAGES is
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ for INDEX in 1 .. 3
+ loop
+
+ TEXT_IO.PUT_LINE( "Receiving message ..." );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.RECEIVE_BUFFER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+
+ TEXT_IO.PUT( "Received : " );
+ MPTEST.PUT_BUFFER( MPTEST.RECEIVE_BUFFER_AREA );
+ TEXT_IO.NEW_LINE;
+
+ end loop;
+
+ TEXT_IO.PUT_LINE( "Receiver delaying for a second" );
+
+ RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end RECEIVE_MESSAGES;
+
+--PAGE
+--
+-- FILL_BUFFER
+--
+
+--
+-- Depends on tricks to make the copy work.
+--
+
+ procedure FILL_BUFFER (
+ SOURCE : in STRING;
+ BUFFER : out RTEMS.BUFFER
+ ) is
+ SOURCE_BUFFER : RTEMS.BUFFER_POINTER;
+ begin
+
+ SOURCE_BUFFER := RTEMS.TO_BUFFER_POINTER(
+ SOURCE( SOURCE'FIRST )'ADDRESS
+ );
+
+ BUFFER.FIELD1 := SOURCE_BUFFER.FIELD1;
+ BUFFER.FIELD2 := SOURCE_BUFFER.FIELD2;
+ BUFFER.FIELD3 := SOURCE_BUFFER.FIELD3;
+ BUFFER.FIELD4 := SOURCE_BUFFER.FIELD4;
+
+ end FILL_BUFFER;
+
+--PAGE
+--
+-- PUT_BUFFER
+--
+
+--
+-- Depends on tricks to make the output work.
+--
+
+ procedure PUT_BUFFER (
+ BUFFER : in RTEMS.BUFFER
+ ) is
+ begin
+
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
+
+ end PUT_BUFFER;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Getting QID of message queue" );
+
+ loop
+
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ MPTEST.QUEUE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
+
+ RTEMS.MESSAGE_QUEUE_DELETE( MPTEST.QUEUE_ID( 1 ), STATUS );
+
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
+ "MESSAGE_QUEUE_DELETE"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "message_queue_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT"
+ );
+
+ MPTEST.SEND_MESSAGES;
+
+ MPTEST.RECEIVE_MESSAGES;
+
+ TEXT_IO.PUT_LINE( "Flushing remote empty queue" );
+ RTEMS.MESSAGE_QUEUE_FLUSH( MPTEST.QUEUE_ID( 1 ), COUNT, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 1 );
+ TEXT_IO.PUT_LINE(
+ " messages were flushed from remote empty queue"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "Send messages to be flushed from remote queue"
+ );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFER_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE( "Flushing remote queue" );
+ RTEMS.MESSAGE_QUEUE_FLUSH( MPTEST.QUEUE_ID( 1 ), COUNT, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 1 );
+ TEXT_IO.PUT_LINE(
+ " messages were flushed from the remote queue"
+ );
+
+ TEXT_IO.PUT_LINE( "Waiting for message queue to be deleted" );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.RECEIVE_BUFFER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.OBJECT_WAS_DELETED,
+ "MESSAGE_QUEUE_FLUSH"
+ );
+
+ else
+
+ MPTEST.RECEIVE_MESSAGES;
+
+ MPTEST.SEND_MESSAGES;
+
+ RTEMS.TASK_WAKE_AFTER(
+ 5 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( MPTEST.QUEUE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 9 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp09/mptest.ads b/c/src/ada-tests/mptests/mp09/mptest.ads
new file mode 100644
index 0000000000..36d8cf716d
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp09/mptest.ads
@@ -0,0 +1,255 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 9 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:39:47 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message
+-- queues created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- The following are message buffers used to contain the test messages
+-- and pointers to those buffers.
+--
+
+ RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
+ BUFFER_AREA_1 : RTEMS.BUFFER;
+ BUFFER_AREA_2 : RTEMS.BUFFER;
+ BUFFER_AREA_3 : RTEMS.BUFFER;
+ BUFFER_AREA_4 : RTEMS.BUFFER;
+
+ RECEIVE_BUFFER : RTEMS.BUFFER_POINTER;
+ BUFFER_1 : RTEMS.BUFFER_POINTER;
+ BUFFER_2 : RTEMS.BUFFER_POINTER;
+ BUFFER_3 : RTEMS.BUFFER_POINTER;
+ BUFFER_4 : RTEMS.BUFFER_POINTER;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- The number of events to process per dot printed out.
+--
+
+ PER_DOT : constant RTEMS.UNSIGNED32 := 100;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- SEND_MESSAGES
+--
+-- This subprogram prints and sends a sequence of three test messages.
+-- One of the messages is sent, one is urgent, and one is broadcast.
+-- A one second pause is between each the sending of each message.
+--
+
+ procedure SEND_MESSAGES;
+
+--
+-- RECEIVE_MESSAGES
+--
+-- This subprogram receives and prints a sequence of three test messages.
+--
+
+ procedure RECEIVE_MESSAGES;
+
+--
+-- FILL_BUFFER
+--
+-- DESCRIPTION:
+--
+-- This subprogram takes the SOURCE input string and places
+-- up to the first sixteen characters of that string into
+-- the message BUFFER.
+--
+
+ procedure FILL_BUFFER (
+ SOURCE : in STRING;
+ BUFFER : out RTEMS.BUFFER
+ );
+
+--
+-- PUT_BUFFER
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the specified message BUFFER.
+--
+
+ procedure PUT_BUFFER (
+ BUFFER : in RTEMS.BUFFER
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 1, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp09/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp09/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..e8889932b4
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp09/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:34 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp09/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp09/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..b1ebe4c350
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp09/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:45 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp10/mptest.adb b/c/src/ada-tests/mptests/mp10/mptest.adb
new file mode 100644
index 0000000000..0c29de4bfd
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp10/mptest.adb
@@ -0,0 +1,301 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 10 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:39:54 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 10 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'A', '3', ' ' );
+
+ MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
+
+ MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ MPTEST.QUEUE_NAME( 1 ),
+ 3,
+ RTEMS.GLOBAL + RTEMS.LIMIT,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
+ RTEMS.SEMAPHORE_CREATE(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ 0,
+ RTEMS.GLOBAL + RTEMS.PRIORITY,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
+
+ RTEMS.TASK_WAKE_AFTER( 10 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ else
+
+ TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 2 ),
+ MPTEST.TEST_TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task 3 (local)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 3 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task 3 (local)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 3 ),
+ MPTEST.TEST_TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Sleeping for 1 second ..." );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Deleting Test_task 2" );
+ RTEMS.TASK_DELETE( MPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 2" );
+
+ TEXT_IO.PUT_LINE( "Deleting Test_task 1" );
+ RTEMS.TASK_DELETE( MPTEST.TASK_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 1" );
+
+ TEXT_IO.PUT_LINE( "Restarting Test_task 3" );
+ RTEMS.TASK_RESTART( MPTEST.TASK_ID( 3 ), 1, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF 3" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 10 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK_1
+--
+
+ procedure TEST_TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
+ RECEIVE_BUFFER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RECEIVE_BUFFER :=
+ RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
+
+ TEXT_IO.PUT_LINE( "Getting QID of message queue" );
+
+ loop
+
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ MPTEST.QUEUE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ TEXT_IO.PUT_LINE( "Attempting to receive message ..." );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ MPTEST.QUEUE_ID( 1 ),
+ RECEIVE_BUFFER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+
+ end TEST_TASK_1;
+
+--PAGE
+--
+-- TEST_TASK_2
+--
+
+ procedure TEST_TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
+
+ loop
+
+ RTEMS.SEMAPHORE_IDENT(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ end TEST_TASK_2;
+
+--PAGE
+--
+-- TEST_TASK_3
+--
+
+ procedure TEST_TASK_3 (
+ RESTART : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if RESTART = 1 then
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
+
+ loop
+
+ RTEMS.SEMAPHORE_IDENT(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ end TEST_TASK_3;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp10/mptest.ads b/c/src/ada-tests/mptests/mp10/mptest.ads
new file mode 100644
index 0000000000..d2a6692025
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp10/mptest.ads
@@ -0,0 +1,225 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 10 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:39:54 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message
+-- queues created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
+-- created by this test.
+--
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- The number of events to process per dot printed out.
+--
+
+ PER_DOT : constant RTEMS.UNSIGNED32 := 100;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK_1
+--
+-- DESCRIPTION:
+--
+-- This is the body of one of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK_2
+--
+-- DESCRIPTION:
+--
+-- This is the body of one of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK_3
+--
+-- DESCRIPTION:
+--
+-- This is the body of one of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK_3 (
+ RESTART : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp10/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp10/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..bad528865f
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp10/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:49 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp10/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp10/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..5ec62cf884
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp10/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:59 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp11/mptest.adb b/c/src/ada-tests/mptests/mp11/mptest.adb
new file mode 100644
index 0000000000..3056b4da52
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp11/mptest.adb
@@ -0,0 +1,138 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 11 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.2 1995/05/31 16:35:09 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 11 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
+
+ MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
+
+ MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Attempting to create Test_task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.GLOBAL,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "TASK_CREATE"
+ );
+ TEXT_IO.PUT_LINE( "task_create correctly returned TOO_MANY" );
+
+ TEXT_IO.PUT_LINE( "Attempting to create Message Queue (Global)" );
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ MPTEST.QUEUE_NAME( 1 ),
+ 3,
+ RTEMS.GLOBAL + RTEMS.LIMIT,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "MESSAGE_QUEUE_CREATE"
+ );
+ TEXT_IO.PUT_LINE(
+ "message_queue_create correctly returned TOO_MANY"
+ );
+
+ TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
+ RTEMS.SEMAPHORE_CREATE(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.GLOBAL,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "SEMAPHORE_CREATE"
+ );
+ TEXT_IO.PUT_LINE( "semaphore_create correctly returned TOO_MANY" );
+
+ TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
+ RTEMS.PARTITION_CREATE(
+ MPTEST.PARTITION_NAME( 1 ),
+ MPTEST.PARTITION_AREA( 0 )'ADDRESS,
+ 128,
+ 64,
+ RTEMS.GLOBAL,
+ MPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "PARTITION_CREATE"
+ );
+ TEXT_IO.PUT_LINE( "partition_create correctly returned TOO_MANY" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 11 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end INIT;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp11/mptest.ads b/c/src/ada-tests/mptests/mp11/mptest.ads
new file mode 100644
index 0000000000..815ef3598d
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp11/mptest.ads
@@ -0,0 +1,185 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 11 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:40:02 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message
+-- queues created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
+-- created by this test.
+--
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS partition
+-- created by this test.
+--
+
+ PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This is the area used for the partition.
+--
+
+ PARTITION_AREA :
+ array ( RTEMS.UNSIGNED32 range 0 .. 1023 ) of RTEMS.UNSIGNED8;
+ for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 0, -- maximum # global objects
+ 0 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 0, -- maximum # messages
+ 1, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp11/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp11/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..6d74d74e33
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp11/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:03 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp11/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp11/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..dd8375a8bd
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp11/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:15 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp12/mptest.adb b/c/src/ada-tests/mptests/mp12/mptest.adb
new file mode 100644
index 0000000000..ff0e1f2c71
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp12/mptest.adb
@@ -0,0 +1,152 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 12 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.2 1995/05/31 16:35:25 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER_ADDRESS : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 12 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
+
+ TEXT_IO.PUT_LINE( "Got to the initialization task" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
+
+ RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Getting ID of remote Partition (Global)" );
+
+ loop
+
+ RTEMS.PARTITION_IDENT(
+ MPTEST.PARTITION_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ TEXT_IO.PUT_LINE(
+ "Attempting to delete remote Partition (Global)"
+ );
+
+ RTEMS.PARTITION_DELETE( MPTEST.PARTITION_ID( 1 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
+ "PARTITION_DELETE"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "partition_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT!!"
+ );
+
+ TEXT_IO.PUT_LINE( "Obtaining a buffer from the global partition" );
+
+ RTEMS.PARTITION_GET_BUFFER(
+ MPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ TEXT_IO.PUT( "Address returned was : " );
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( BUFFER_ADDRESS, RTEMS.NULL_ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.PARTITION_RETURN_BUFFER(
+ MPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+
+ RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ else
+
+ TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
+ RTEMS.PARTITION_CREATE(
+ MPTEST.PARTITION_NAME( 1 ),
+ MPTEST.PARTITION_AREA( 0 )'ADDRESS,
+ 128,
+ 64,
+ RTEMS.GLOBAL,
+ MPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Sleeping for three seconds" );
+ RTEMS.TASK_WAKE_AFTER( 3 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Deleting Partition (Global)" );
+ RTEMS.PARTITION_DELETE( MPTEST.PARTITION_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 12 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end INIT;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp12/mptest.ads b/c/src/ada-tests/mptests/mp12/mptest.ads
new file mode 100644
index 0000000000..fc1914c0b2
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp12/mptest.ads
@@ -0,0 +1,183 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 12 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:40:11 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
+-- created by this test.
+--
+
+ PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the area used for the partition.
+--
+
+ PARTITION_AREA :
+ array ( RTEMS.UNSIGNED32 range 0 .. 1023 ) of RTEMS.UNSIGNED8;
+ for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 1, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp12/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp12/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..59c4906316
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp12/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:19 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp12/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp12/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..d96f0cea14
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp12/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:30 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp13/mptest.adb b/c/src/ada-tests/mptests/mp13/mptest.adb
new file mode 100644
index 0000000000..08ce8f2cbb
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp13/mptest.adb
@@ -0,0 +1,328 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 13 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:40:19 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 13 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
+
+ MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ MPTEST.QUEUE_NAME( 1 ),
+ 3,
+ RTEMS.GLOBAL + RTEMS.LIMIT,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
+ RTEMS.SEMAPHORE_CREATE(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.GLOBAL + RTEMS.PRIORITY,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.TEST_TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 2 ),
+ MPTEST.TEST_TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Deleting initialization task" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK_1
+--
+
+ procedure TEST_TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
+ RECEIVE_BUFFER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RECEIVE_BUFFER :=
+ RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
+
+ TEXT_IO.PUT_LINE( "Getting QID of message queue" );
+
+ loop
+
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ MPTEST.QUEUE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Receiving message ..." );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ MPTEST.QUEUE_ID( 1 ),
+ RECEIVE_BUFFER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEXT_IO.PUT_LINE( "How did I get back from here???" );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+
+ end if;
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Receiving message ..." );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ MPTEST.QUEUE_ID( 1 ),
+ RECEIVE_BUFFER,
+ RTEMS.DEFAULT_OPTIONS,
+ 2 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "MESSAGE_QUEUE_RECEIVE"
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "MESSAGE_QUEUE_OBTAIN"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "message_queue_receive correctly returned TIMEOUT"
+ );
+
+ TEXT_IO.PUT_LINE( "Deleting self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end TEST_TASK_1;
+
+--PAGE
+--
+-- TEST_TASK_2
+--
+
+ procedure TEST_TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
+
+ loop
+
+ RTEMS.SEMAPHORE_IDENT(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Releasing semaphore ..." );
+ RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Getting semaphore ..." );
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ TEXT_IO.PUT_LINE( "Getting semaphore ..." );
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEXT_IO.PUT_LINE( "How did I get back from here???" );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ end if;
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Getting semaphore ..." );
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ TEXT_IO.PUT_LINE( "Releasing semaphore ..." );
+ RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "Getting semaphore ..." );
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ 2 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "SEMAPHORE_OBTAIN"
+ );
+ TEXT_IO.PUT_LINE( "semaphore_obtain correctly returned TIMEOUT" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK_2;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp13/mptest.ads b/c/src/ada-tests/mptests/mp13/mptest.ads
new file mode 100644
index 0000000000..449980dd39
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp13/mptest.ads
@@ -0,0 +1,207 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 13 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:40:20 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message
+-- queues created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
+-- created by this test.
+--
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- This variable contains the ID of the remote task with which this
+-- test interacts.
+--
+
+ REMOTE_TID : RTEMS.ID;
+
+--
+-- This variable contains the node on which the remote task with which
+-- this test interacts resides.
+--
+
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK_1
+--
+-- DESCRIPTION:
+--
+-- This is the body of one of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK_2
+--
+-- DESCRIPTION:
+--
+-- This is the body of one of the RTEMS tasks which constitute this test.
+--
+
+ procedure TEST_TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp13/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp13/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..89dee477ed
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp13/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:34 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp13/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp13/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..a1bf6f6205
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp13/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:45 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp14/mptest.adb b/c/src/ada-tests/mptests/mp14/mptest.adb
new file mode 100644
index 0000000000..35ffe161f5
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp14/mptest.adb
@@ -0,0 +1,764 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 14 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:40:27 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with BSP;
+with BSP_MPCI;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- STOP_TEST_TSR
+--
+
+ procedure STOP_TEST_TSR (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ MPTEST.STOP_TEST := TRUE;
+
+ end STOP_TEST_TSR;
+
+--PAGE
+--
+-- EXIT_TEST
+--
+
+ procedure EXIT_TEST is
+ OLD_MODE : RTEMS.MODE;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_MODE( RTEMS.NO_PREEMPT, RTEMS.PREEMPT_MASK, OLD_MODE, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ BSP_MPCI.PRINT_STATISTICS;
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end EXIT_TEST;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** TEST 14 -- NODE " );
+ UNSIGNED32_IO.PUT(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
+ WIDTH => 1
+ );
+ TEXT_IO.PUT_LINE( " ***" );
+
+ MPTEST.STOP_TIMER_NAME := RTEMS.BUILD_NAME( 'S', 'T', 'O', 'P' );
+
+ MPTEST.STOP_TEST := FALSE;
+
+ RTEMS.TIMER_CREATE(
+ MPTEST.STOP_TIMER_NAME,
+ MPTEST.STOP_TIMER_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.STOP_TIMER_ID,
+ BSP.MAXIMUM_LONG_TEST_DURATION * TEST_SUPPORT.TICKS_PER_SECOND,
+ MPTEST.STOP_TEST_TSR'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ MPTEST.EVENT_TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
+ MPTEST.EVENT_TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
+
+ MPTEST.QUEUE_TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'T', '1', ' ' );
+ MPTEST.QUEUE_TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'M', 'T', '2', ' ' );
+
+ MPTEST.PARTITION_TASK_NAME( 1 ) :=
+ RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
+ MPTEST.PARTITION_TASK_NAME( 2 ) :=
+ RTEMS.BUILD_NAME( 'P', 'T', '2', ' ' );
+
+ MPTEST.SEMAPHORE_TASK_NAME( 1 ) :=
+ RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
+ MPTEST.SEMAPHORE_TASK_NAME( 2 ) :=
+ RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
+
+ MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
+
+ MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
+
+ MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
+
+ MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', 'R', ' ' );
+
+ for INDEX in MPTEST.BUFFERS'FIRST .. MPTEST.BUFFERS'LAST
+ loop
+
+ MPTEST.BUFFERS( INDEX ) :=
+ RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREAS( INDEX )'ADDRESS );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
+ RTEMS.SEMAPHORE_CREATE(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.GLOBAL,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ MPTEST.QUEUE_NAME( 1 ),
+ 1,
+ RTEMS.GLOBAL,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
+ RTEMS.PARTITION_CREATE(
+ MPTEST.PARTITION_NAME( 1 ),
+ MPTEST.PARTITION_AREA( 0 )'ADDRESS,
+ 16#8000#,
+ 16#3000#,
+ RTEMS.GLOBAL,
+ MPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Creating Event task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.EVENT_TASK_NAME(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
+ ),
+ 2,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.EVENT_TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Event task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.EVENT_TASK_ID( 1 ),
+ MPTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Creating Semaphore task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.SEMAPHORE_TASK_NAME(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
+ ),
+ 2,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.SEMAPHORE_TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Semaphore task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.SEMAPHORE_TASK_ID( 1 ),
+ MPTEST.SEMAPHORE_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Creating Message Queue task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.QUEUE_TASK_NAME(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
+ ),
+ 2,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.QUEUE_TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Message Queue task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.QUEUE_TASK_ID( 1 ),
+ MPTEST.MESSAGE_QUEUE_TASK'ACCESS,
+ 1, -- index of buffer
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ TEXT_IO.PUT_LINE( "Creating Partition task (Global)" );
+ RTEMS.TASK_CREATE(
+ MPTEST.PARTITION_TASK_NAME(
+ MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
+ ),
+ 2,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.GLOBAL,
+ MPTEST.PARTITION_TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ TEXT_IO.PUT_LINE( "Starting Partition task (Global)" );
+ RTEMS.TASK_START(
+ MPTEST.PARTITION_TASK_ID( 1 ),
+ MPTEST.PARTITION_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 2, PREVIOUS_PRIORITY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ MPTEST.DELAYED_EVENTS_TASK( 1 );
+
+ end INIT;
+
+--
+-- DELAYED_SEND_EVENT
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a timer service routine which sends an
+-- event set to a waiting task.
+--
+
+ procedure DELAYED_SEND_EVENT (
+ TIMER_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND(
+ MPTEST.TASK_ID( RTEMS.GET_INDEX( TIMER_ID ) ),
+ RTEMS.EVENT_16,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
+
+ end DELAYED_SEND_EVENT;
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ REMOTE_NODE : RTEMS.UNSIGNED32;
+ REMOTE_TID : RTEMS.ID;
+ COUNT : RTEMS.UNSIGNED32;
+ EVENT_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ REMOTE_NODE := 2;
+ else
+ REMOTE_NODE := 1;
+ end if;
+
+ TEXT_IO.PUT_LINE( "About to go to sleep!" );
+ RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ TEXT_IO.PUT_LINE( "Waking up!" );
+
+ TEXT_IO.PUT( "Remote task's name is : " );
+ TEST_SUPPORT.PUT_NAME( MPTEST.EVENT_TASK_NAME( REMOTE_NODE ), TRUE );
+
+ TEXT_IO.PUT_LINE( "Getting TID of remote task" );
+
+ loop
+
+ RTEMS.TASK_IDENT(
+ MPTEST.EVENT_TASK_NAME( REMOTE_NODE ),
+ RTEMS.SEARCH_ALL_NODES,
+ REMOTE_TID,
+ STATUS
+ );
+
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ TEXT_IO.PUT_LINE( "task_ident" );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+ TEXT_IO.PUT_LINE( "Sending events to remote task" );
+
+ loop
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
+ loop
+ RTEMS.EVENT_SEND(
+ REMOTE_TID,
+ RTEMS.EVENT_16,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "e" );
+
+ end loop;
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "Receiving events from remote task" );
+
+ loop
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
+ loop
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "e" );
+
+ end loop;
+
+ MPTEST.EXIT_TEST;
+
+ end TEST_TASK;
+
+--
+-- DELAYED_EVENTS_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure DELAYED_EVENTS_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ PREVIOUS_MODE : RTEMS.MODE;
+ EVENTS_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_MODE(
+ RTEMS.PREEMPT + RTEMS.TIMESLICE,
+ RTEMS.PREEMPT_MASK + RTEMS.TIMESLICE_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ RTEMS.TIMER_CREATE(
+ MPTEST.TIMER_NAME( 1 ),
+ MPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ RTEMS.TASK_IDENT(
+ RTEMS.SELF,
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.TASK_ID( RTEMS.GET_INDEX( MPTEST.TIMER_ID( 1 ) ) ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENTS" );
+
+ loop
+
+ for COUNT in 1 .. MPTEST.DELAYED_EVENT_DOT_COUNT
+ loop
+ RTEMS.TIMER_FIRE_AFTER(
+ MPTEST.TIMER_ID( 1 ),
+ 1,
+ MPTEST.DELAYED_SEND_EVENT'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTS_OUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "." );
+
+ end loop;
+
+ MPTEST.EXIT_TEST;
+
+ end DELAYED_EVENTS_TASK;
+
+--
+-- MESSAGE_QUEUE_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure MESSAGE_QUEUE_TASK (
+ INDEX : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ YIELD_COUNT : RTEMS.UNSIGNED32;
+ OVERFLOW_COUNT : RTEMS.UNSIGNED32_POINTER;
+ BUFFER_COUNT : RTEMS.UNSIGNED32_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ MPTEST.BUFFERS( INDEX ).FIELD1 := 0;
+ MPTEST.BUFFERS( INDEX ).FIELD2 := 0;
+ MPTEST.BUFFERS( INDEX ).FIELD3 := 0;
+ MPTEST.BUFFERS( INDEX ).FIELD4 := 0;
+
+ TEXT_IO.PUT_LINE( "Getting ID of message queue" );
+
+ loop
+
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ MPTEST.QUEUE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ TEXT_IO.PUT_LINE( "message_queue_ident FAILED!!" );
+
+ end loop;
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFERS( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ OVERFLOW_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
+ MPTEST.BUFFERS( INDEX ).FIELD1'ADDRESS
+ );
+
+ BUFFER_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
+ MPTEST.BUFFERS( INDEX ).FIELD2'ADDRESS
+ );
+
+ else
+
+ OVERFLOW_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
+ MPTEST.BUFFERS( INDEX ).FIELD3'ADDRESS
+ );
+
+ BUFFER_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
+ MPTEST.BUFFERS( INDEX ).FIELD4'ADDRESS
+ );
+
+ end if;
+
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ YIELD_COUNT := 100;
+
+ for COUNT in 1 .. MPTEST.MESSAGE_DOT_COUNT
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFERS( INDEX ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_RECEIVE"
+ );
+
+ if BUFFER_COUNT.ALL = RTEMS.UNSIGNED32'LAST then
+ BUFFER_COUNT.ALL := 0;
+ OVERFLOW_COUNT.ALL := OVERFLOW_COUNT.ALL + 1;
+ else
+ BUFFER_COUNT.ALL := BUFFER_COUNT.ALL + 1;
+ end if;
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ MPTEST.QUEUE_ID( 1 ),
+ MPTEST.BUFFERS( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ if MPTEST.STOP_TEST = FALSE then
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ YIELD_COUNT := YIELD_COUNT - 1;
+
+ if YIELD_COUNT = 0 then
+
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
+
+ YIELD_COUNT := 100;
+
+ end if;
+
+ end if;
+
+ end if;
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "m" );
+
+ end loop;
+
+ MPTEST.EXIT_TEST;
+
+ end MESSAGE_QUEUE_TASK;
+
+--
+-- PARTITION_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure PARTITION_TASK (
+ IGNORED : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ BUFFER : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "Getting ID of partition" );
+
+ loop
+
+ RTEMS.PARTITION_IDENT(
+ MPTEST.PARTITION_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ TEXT_IO.PUT_LINE( "partition_ident FAILED!!" );
+
+ end loop;
+
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ for COUNT in 1 .. MPTEST.PARTITION_DOT_COUNT
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ RTEMS.PARTITION_GET_BUFFER(
+ MPTEST.PARTITION_ID( 1 ),
+ BUFFER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+
+ RTEMS.PARTITION_RETURN_BUFFER(
+ MPTEST.PARTITION_ID( 1 ),
+ BUFFER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "PARTITION_RETURN_BUFFER"
+ );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
+
+ end if;
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "p" );
+
+ end loop;
+
+ MPTEST.EXIT_TEST;
+
+ end PARTITION_TASK;
+
+--
+-- SEMAPHORE_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure SEMAPHORE_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ COUNT : RTEMS.UNSIGNED32;
+ YIELD_COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "Getting ID of semaphore" );
+
+ loop
+
+ RTEMS.SEMAPHORE_IDENT(
+ MPTEST.SEMAPHORE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ MPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
+
+ TEXT_IO.PUT_LINE( "semaphore_ident FAILED!!" );
+
+ end loop;
+
+ loop
+
+ YIELD_COUNT := 100;
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ for COUNT in 1 .. MPTEST.SEMAPHORE_DOT_COUNT
+ loop
+
+ exit when MPTEST.STOP_TEST = TRUE;
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ MPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
+
+ if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
+
+ YIELD_COUNT := YIELD_COUNT - 1;
+
+ if YIELD_COUNT = 0 then
+
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
+
+ YIELD_COUNT := 100;
+
+ end if;
+
+ end if;
+
+ end loop;
+
+ TEST_SUPPORT.PUT_DOT( "s" );
+
+ end loop;
+
+ MPTEST.EXIT_TEST;
+
+ end SEMAPHORE_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp14/mptest.ads b/c/src/ada-tests/mptests/mp14/mptest.ads
new file mode 100644
index 0000000000..f86db4d21b
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp14/mptest.ads
@@ -0,0 +1,348 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 14 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:40:28 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test for passing event sets.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test for passing event sets.
+--
+
+ EVENT_TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ EVENT_TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test for manipulating semaphores.
+--
+
+ SEMAPHORE_TASK_ID :
+ array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ SEMAPHORE_TASK_NAME :
+ array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test for passing messages.
+--
+
+ QUEUE_TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ QUEUE_TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test for manipulating the global partitions.
+--
+
+ PARTITION_TASK_ID :
+ array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ PARTITION_TASK_NAME :
+ array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS partitions
+-- created by this test.
+--
+
+ PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphores
+-- created by this test.
+--
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message_queues
+-- created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers
+-- created by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- The following are message buffers used to contain the test messages
+-- and pointers to those buffers.
+--
+
+ BUFFER_AREAS : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.BUFFER;
+ BUFFERS :
+ array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.BUFFER_POINTER;
+
+--
+-- This is the area used for the partition.
+--
+
+ PARTITION_AREA :
+ array ( RTEMS.UNSIGNED32 range 0 .. 16#7FFF# ) of RTEMS.UNSIGNED8;
+ for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- The following constants control the flow of "dot" indicators
+-- from the various test componenents.
+--
+
+ EVENT_TASK_DOT_COUNT : constant RTEMS.UNSIGNED32 := 100;
+ EVENT_SEND_DOT_COUNT : constant RTEMS.UNSIGNED32 := 100;
+ DELAYED_EVENT_DOT_COUNT : constant RTEMS.UNSIGNED32 := 1000;
+ MESSAGE_DOT_COUNT : constant RTEMS.UNSIGNED32 := 200;
+ PARTITION_DOT_COUNT : constant RTEMS.UNSIGNED32 := 200;
+ SEMAPHORE_DOT_COUNT : constant RTEMS.UNSIGNED32 := 200;
+
+--
+-- These contain the IDs and NAMEs of the RTEMS timers used
+-- by this test to stop.
+--
+
+ STOP_TIMER_ID : RTEMS.ID;
+ STOP_TIMER_NAME : RTEMS.NAME;
+
+--
+-- This variable is set when the test should stop executing.
+--
+
+ STOP_TEST : RTEMS.BOOLEAN;
+
+--
+-- EXIT_TEST
+--
+-- DESCRIPTION:
+--
+-- This subprogram is invoked to stop this test.
+--
+
+ procedure EXIT_TEST;
+
+--
+-- DELAYED_SEND_EVENT
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a timer service routine which sends an
+-- event set to a waiting task.
+--
+
+ procedure DELAYED_SEND_EVENT (
+ TIMER_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- DELAYED_EVENTS_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure DELAYED_EVENTS_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MESSAGE_QUEUE_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure MESSAGE_QUEUE_TASK (
+ INDEX : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PARTITION_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure PARTITION_TASK (
+ IGNORED : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- SEMAPHORE_TASK
+--
+-- DESCRIPTION:
+--
+-- This is one of the test tasks.
+--
+
+ procedure SEMAPHORE_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.TIMESLICE, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 32, -- maximum # global objects
+ 32 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 12, -- maximum # timers
+ 1, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 1, -- maximum # messages
+ 1, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 1 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/mptests/mp14/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp14/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..77430d518f
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp14/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:50 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/mptests/mp14/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/mptests/mp14/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..f0c6fb16da
--- /dev/null
+++ b/c/src/ada-tests/mptests/mp14/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:36:00 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/samples/base_mp/mptest.adb b/c/src/ada-tests/samples/base_mp/mptest.adb
new file mode 100644
index 0000000000..0e7d345f14
--- /dev/null
+++ b/c/src/ada-tests/samples/base_mp/mptest.adb
@@ -0,0 +1,108 @@
+--
+-- MPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation for Test 1 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.adb,v 1.3 1995/07/12 19:40:36 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body MPTEST is
+
+ package body PER_NODE_CONFIGURATION is separate;
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ C : RTEMS.CHARACTER;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT( "*** SAMPLE MULTIPROCESSOR APPLICATION ***" );
+ TEXT_IO.PUT( "Creating and starting an application task" );
+
+
+ MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ MPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.INTERRUPT_LEVEL( 0 ),
+ RTEMS.DEFAULT_ATTRIBUTES,
+ MPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ MPTEST.TASK_ID( 1 ),
+ MPTEST.APPLICATION_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- APPLICATION_TASK
+--
+
+ procedure APPLICATION_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ TID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ TEXT_IO.PUT( "This task was invoked with node argument (" );
+ UNSIGNED32_IO.PUT( ARGUMENT );
+ TEXT_IO.PUT_LINE( ")" );
+
+ TEXT_IO.PUT( "This task has the id of 0x" );
+ UNSIGNED32_IO.PUT( TID, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "*** END OF SAMPLE MULTIPROCESSOR APPLICATION ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end APPLICATION_TASK;
+
+end MPTEST;
diff --git a/c/src/ada-tests/samples/base_mp/mptest.ads b/c/src/ada-tests/samples/base_mp/mptest.ads
new file mode 100644
index 0000000000..9f683301ce
--- /dev/null
+++ b/c/src/ada-tests/samples/base_mp/mptest.ads
@@ -0,0 +1,167 @@
+--
+-- MPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Multiprocessor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest.ads,v 1.3 1995/07/12 19:40:37 joel Exp
+--
+
+with CLOCK_DRIVER;
+with BSP_MPCI;
+with RTEMS;
+
+package MPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- APPLICATION_TASK
+--
+-- DESCRIPTION:
+--
+-- This routine is as an example of an application task which
+-- prints a message including its RTEMS task id. This task
+-- then invokes exit to return to the monitor.
+--
+
+ procedure APPLICATION_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.GLOBAL, -- attributes
+ MPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- BEGIN SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+ --
+ -- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
+ --
+ -- DESCRIPTION:
+ --
+ -- This package is the specification for the subpackage
+ -- which will define the per node configuration parameters.
+ --
+
+ package PER_NODE_CONFIGURATION is
+
+ --
+ -- LOCAL_NODE_NUMBER
+ --
+ -- DESCRIPTION:
+ --
+ -- This function returns the node number for this node.
+ --
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32;
+
+ pragma INLINE ( LOCAL_NODE_NUMBER );
+
+ end PER_NODE_CONFIGURATION;
+
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+-- END SUBPACKAGE --
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+
+--
+-- This is the Multiprocessor Configuration Table for this test.
+--
+
+ MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
+ MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
+ 2, -- maximum # nodes in system
+ 33, -- maximum # global objects
+ 33 -- maximum # proxies
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end MPTEST;
diff --git a/c/src/ada-tests/samples/base_mp/node1/mptest-per_node_configuration.adb b/c/src/ada-tests/samples/base_mp/node1/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..623d1500ca
--- /dev/null
+++ b/c/src/ada-tests/samples/base_mp/node1/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:36:05 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 1;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/samples/base_mp/node2/mptest-per_node_configuration.adb b/c/src/ada-tests/samples/base_mp/node2/mptest-per_node_configuration.adb
new file mode 100644
index 0000000000..5e5e016936
--- /dev/null
+++ b/c/src/ada-tests/samples/base_mp/node2/mptest-per_node_configuration.adb
@@ -0,0 +1,43 @@
+--
+-- MPTEST.PER_NODE_CONFIGURATION / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the subpackage
+-- which will define the per node configuration parameters.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:36:17 joel Exp
+--
+
+with RTEMS;
+
+separate ( MPTEST )
+
+package body PER_NODE_CONFIGURATION is
+
+--PAGE
+--
+-- LOCAL_NODE_NUMBER
+--
+
+ function LOCAL_NODE_NUMBER
+ return RTEMS.UNSIGNED32 is
+ begin
+
+ return 2;
+
+ end LOCAL_NODE_NUMBER;
+
+end PER_NODE_CONFIGURATION;
diff --git a/c/src/ada-tests/samples/base_sp/sptest.adb b/c/src/ada-tests/samples/base_sp/sptest.adb
new file mode 100644
index 0000000000..f52daa1483
--- /dev/null
+++ b/c/src/ada-tests/samples/base_sp/sptest.adb
@@ -0,0 +1,98 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:40:50 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** SAMPLE SINGLE PROCESSOR APPLICATION ***" );
+ TEXT_IO.PUT_LINE( "Creating and starting an application task" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.INTERRUPT_LEVEL( 0 ),
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.APPLICATION_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- APPLICATION_TASK
+--
+
+ procedure APPLICATION_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+
+ TEXT_IO.PUT( "Application task was invoked with argument (" );
+ UNSIGNED32_IO.PUT( ARGUMENT );
+ TEXT_IO.PUT( ") and has id of 0x" );
+ UNSIGNED32_IO.PUT( TID, BASE => 16 );
+
+ TEXT_IO.PUT_LINE( "*** END OF SAMPLE SINGLE PROCESSOR APPLICATION ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end APPLICATION_TASK;
+
+end SPTEST;
diff --git a/c/src/ada-tests/samples/base_sp/sptest.ads b/c/src/ada-tests/samples/base_sp/sptest.ads
new file mode 100644
index 0000000000..4b73a64c4a
--- /dev/null
+++ b/c/src/ada-tests/samples/base_sp/sptest.ads
@@ -0,0 +1,115 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:40:51 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- APPLICATION_TASK
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS task which constitutes this test.
+--
+
+ procedure APPLICATION_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/samples/hello/sptest.adb b/c/src/ada-tests/samples/hello/sptest.adb
new file mode 100644
index 0000000000..a4b2007f89
--- /dev/null
+++ b/c/src/ada-tests/samples/hello/sptest.adb
@@ -0,0 +1,52 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.2 1995/05/31 16:36:34 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** HELLO WORLD TEST ***" );
+ TEXT_IO.PUT_LINE( "Hello World" );
+ TEXT_IO.PUT_LINE( "*** END OF HELLO WORLD TEST ***" );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end INIT;
+
+end SPTEST;
diff --git a/c/src/ada-tests/samples/hello/sptest.ads b/c/src/ada-tests/samples/hello/sptest.ads
new file mode 100644
index 0000000000..9b63b3bff7
--- /dev/null
+++ b/c/src/ada-tests/samples/hello/sptest.ads
@@ -0,0 +1,90 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for the Hello World Test of the RTEMS
+-- Sample Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:40:54 joel Exp
+--
+
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- No Device Drivers for this test.
+--
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/samples/ticker/sptest.adb b/c/src/ada-tests/samples/ticker/sptest.adb
new file mode 100644
index 0000000000..5c78cd16c5
--- /dev/null
+++ b/c/src/ada-tests/samples/ticker/sptest.adb
@@ -0,0 +1,162 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:40:57 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 1 ***" );
+
+ TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1_THROUGH_3
+--
+
+ procedure TASK_1_THROUGH_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ loop
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ if TIME.SECOND >= 35 then
+ TEXT_IO.PUT_LINE( "*** END OF CLOCK TICK TEST ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+ FALSE
+ );
+
+ TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_WAKE_AFTER(
+ TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
+ TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end loop;
+
+ end TASK_1_THROUGH_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/samples/ticker/sptest.ads b/c/src/ada-tests/samples/ticker/sptest.ads
new file mode 100644
index 0000000000..540eb86374
--- /dev/null
+++ b/c/src/ada-tests/samples/ticker/sptest.ads
@@ -0,0 +1,115 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:40:58 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1_THROUGH_3
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TASK_1_THROUGH_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp01/sptest.adb b/c/src/ada-tests/sptests/sp01/sptest.adb
new file mode 100644
index 0000000000..5c0b7ae79c
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp01/sptest.adb
@@ -0,0 +1,162 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:04 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 1 ***" );
+
+ TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.INTERRUPT_LEVEL( 31 ),
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1_THROUGH_3
+--
+
+ procedure TASK_1_THROUGH_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ loop
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ if TIME.SECOND >= 35 then
+ TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+ FALSE
+ );
+
+ TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_WAKE_AFTER(
+ TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
+ TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end loop;
+
+ end TASK_1_THROUGH_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp01/sptest.ads b/c/src/ada-tests/sptests/sp01/sptest.ads
new file mode 100644
index 0000000000..348f8f48ce
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp01/sptest.ads
@@ -0,0 +1,115 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:05 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1_THROUGH_3
+--
+-- DESCRIPTION:
+--
+-- This is the body of the RTEMS tasks which constitute this test.
+--
+
+ procedure TASK_1_THROUGH_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp02/sptest.adb b/c/src/ada-tests/sptests/sp02/sptest.adb
new file mode 100644
index 0000000000..1597b6549c
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp02/sptest.adb
@@ -0,0 +1,331 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 2 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:09 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 2 ***" );
+
+ SPTEST.PREEMPT_TASK_NAME := RTEMS.BUILD_NAME( 'P', 'R', 'M', 'T' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.PREEMPT_TASK_NAME,
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.PREEMPT_TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF PREEMPT" );
+
+ RTEMS.TASK_START(
+ SPTEST.PREEMPT_TASK_ID,
+ SPTEST.PREEMPT_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF PREEMPT" );
+
+ TEXT_IO.PUT_LINE( "INIT - task_wake_after - yielding processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 3,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 3,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 3,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ TEXT_IO.PUT_LINE(
+ "INIT - suspending TA2 while middle task on a ready chain"
+ );
+
+ RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
+
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 3,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 3,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PREEMPT_TASK
+--
+
+ procedure PREEMPT_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "PREEMPT - task_delete - deleting self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PREEMPT" );
+
+ end PREEMPT_TASK;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID2 : RTEMS.ID;
+ TID3 : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ RTEMS.TASK_IDENT(
+ SPTEST.TASK_NAME( 2 ),
+ RTEMS.SEARCH_ALL_NODES,
+ TID2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
+
+ TEXT_IO.PUT( "TA1 - task_ident - tid of TA2 (" );
+ UNSIGNED32_IO.PUT( TID2, WIDTH => 8, BASE => 10#16# );
+ TEXT_IO.PUT_LINE( ")" );
+
+ RTEMS.TASK_IDENT(
+ SPTEST.TASK_NAME( 3 ),
+ RTEMS.SEARCH_ALL_NODES,
+ TID3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
+
+ TEXT_IO.PUT( "TA1 - task_ident - tid of TA3 (" );
+ UNSIGNED32_IO.PUT( TID3, WIDTH => 8, BASE => 10#16# );
+ TEXT_IO.PUT_LINE( ")" );
+
+ RTEMS.TASK_SET_PRIORITY( TID3, 2, PREVIOUS_PRIORITY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_set_priority - set TA3's priority to 2"
+ );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
+ RTEMS.TASK_SUSPEND( TID2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
+ RTEMS.TASK_DELETE( TID2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep for 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 minute" );
+ RTEMS.TASK_WAKE_AFTER( 60 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA2" );
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA3" );
+
+ TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+ end TASK_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp02/sptest.ads b/c/src/ada-tests/sptests/sp02/sptest.ads
new file mode 100644
index 0000000000..8cfacaf25e
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp02/sptest.ads
@@ -0,0 +1,154 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 2 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:10 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+ PREEMPT_TASK_ID : RTEMS.ID;
+ PREEMPT_TASK_NAME : RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PREEMPT_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the basic preemption capability.
+--
+
+ procedure PREEMPT_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp03/sptest.adb b/c/src/ada-tests/sptests/sp03/sptest.adb
new file mode 100644
index 0000000000..95df5bc436
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp03/sptest.adb
@@ -0,0 +1,173 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 3 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:13 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 3 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
+ TEST_SUPPORT.PRINT_TIME( "sets clock: ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ loop
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
+ TEST_SUPPORT.PRINT_TIME( "going to sleep: ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ TIME.SECOND := TIME.SECOND + 5;
+ TIME.MINUTE := TIME.MINUTE + (TIME.SECOND / 60 );
+ TIME.SECOND := TIME.SECOND mod 60;
+ TIME.HOUR := TIME.HOUR + (TIME.MINUTE / 60 );
+ TIME.MINUTE := TIME.MINUTE mod 60;
+ TIME.HOUR := TIME.HOUR mod 24;
+
+ RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
+
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
+ TEST_SUPPORT.PRINT_TIME( "awakened: ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ end loop;
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ loop
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ if TIME.SECOND >= 17 then
+ TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 2 ), FALSE );
+ TEST_SUPPORT.PRINT_TIME( " ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ end loop;
+
+ end TASK_2;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp03/sptest.ads b/c/src/ada-tests/sptests/sp03/sptest.ads
new file mode 100644
index 0000000000..ca947842a5
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp03/sptest.ads
@@ -0,0 +1,129 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 3 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:14 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the TASK_WAKE_WHEN directive of
+-- the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the TASK_WAKE_AFTER directive of
+-- the Task Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp04/sptest.adb b/c/src/ada-tests/sptests/sp04/sptest.adb
new file mode 100644
index 0000000000..f777d4091e
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp04/sptest.adb
@@ -0,0 +1,311 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 4 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:17 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 4 ***" );
+
+ TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ SPTEST.EXTENSION_NAME( 1 ) := RTEMS.BUILD_NAME( 'E', 'X', 'T', ' ' );
+
+ RTEMS.EXTENSION_CREATE(
+ SPTEST.EXTENSION_NAME( 1 ),
+ SPTEST.EXTENSIONS'ACCESS,
+ EXTENSION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EXTENSION_CREATE" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ SPTEST.RUN_COUNT( 1 ) := 0;
+ SPTEST.RUN_COUNT( 2 ) := 0;
+ SPTEST.RUN_COUNT( 3 ) := 0;
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 1,
+ 2048,
+ RTEMS.TIMESLICE,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ SECONDS : RTEMS.UNSIGNED32;
+ OLD_SECONDS : RTEMS.UNSIGNED32;
+ STARTED_DELAY : RTEMS.UNSIGNED32;
+ PREVIOUS_MODE : RTEMS.MODE;
+ TIME : RTEMS.TIME_OF_DAY;
+ START_TIME : RTEMS.INTERVAL;
+ END_TIME : RTEMS.INTERVAL;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - on Task 2" );
+ RTEMS.TASK_SUSPEND( TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - on Task 3" );
+ RTEMS.TASK_SUSPEND( TASK_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
+
+ TEXT_IO.PUT_LINE( "TA1 - killing time" );
+
+ RTEMS.CLOCK_GET(
+ RTEMS.CLOCK_GET_SECONDS_SINCE_EPOCH,
+ START_TIME'ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ loop
+ RTEMS.CLOCK_GET(
+ RTEMS.CLOCK_GET_SECONDS_SINCE_EPOCH,
+ END_TIME'ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ exit when END_TIME > (START_TIME + 2);
+ end loop;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_resume - on Task 2" );
+ RTEMS.TASK_RESUME( TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_resume - on Task 3" );
+ RTEMS.TASK_RESUME( TASK_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
+
+ loop
+
+ if SPTEST.RUN_COUNT( 1 ) = 3 then
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_mode - change mode to NO PREEMPT"
+ );
+ RTEMS.TASK_MODE(
+ RTEMS.NO_PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ OLD_SECONDS := TIME.SECOND;
+
+ SECONDS := 0;
+ loop
+
+ exit when SECONDS >= 6;
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ if TIME.SECOND /= OLD_SECONDS then
+ OLD_SECONDS := TIME.SECOND;
+ SECONDS := SECONDS + 1;
+ TEST_SUPPORT.PRINT_TIME( "TA1 - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ end if;
+
+ end loop;
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_mode - change mode to PREEMPT"
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+<<LOOP_LABEL>>
+ goto LOOP_LABEL;
+
+ end if;
+
+ end loop;
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+<<LOOP_LABEL>>
+ goto LOOP_LABEL;
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+<<LOOP_LABEL>>
+ goto LOOP_LABEL;
+
+ end TASK_3;
+
+--PAGE
+--
+-- TASK_SWITCH
+--
+
+ procedure TASK_SWITCH (
+ UNUSED : in RTEMS.TCB_POINTER;
+ HEIR : in RTEMS.TCB_POINTER
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ INDEX := TEST_SUPPORT.TASK_NUMBER( HEIR.OBJECT.ID );
+
+ case INDEX is
+ when 1 | 2 | 3 =>
+ SPTEST.RUN_COUNT( INDEX ) := SPTEST.RUN_COUNT( INDEX ) + 1;
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INDEX ), FALSE );
+ TEST_SUPPORT.PRINT_TIME( "- ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ if TIME.SECOND >= 16 then
+ TEXT_IO.PUT_LINE( "*** END OF TEST 4 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ when others =>
+ NULL;
+ end case;
+
+ end TASK_SWITCH;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp04/sptest.ads b/c/src/ada-tests/sptests/sp04/sptest.ads
new file mode 100644
index 0000000000..86d8e6f735
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp04/sptest.ads
@@ -0,0 +1,187 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 4 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:18 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS extensions created
+-- by this test.
+--
+
+ EXTENSION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ EXTENSION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- This array contains the number of times each of the test tasks has
+-- been context switched TO.
+--
+
+ RUN_COUNT : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is used as a background task to suspend, resume,
+-- and context switch to.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is used as a background task to suspend, resume,
+-- and context switch to.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_SWITCH
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the TASK_SWITCH extension for this test.
+-- It is invoked at each context switch and counts the number
+-- of times each application task has been context switched to.
+--
+
+ procedure TASK_SWITCH (
+ UNUSED : in RTEMS.TCB_POINTER;
+ HEIR : in RTEMS.TCB_POINTER
+ );
+
+--
+-- This is the User Extension Table for this test.
+--
+
+ EXTENSIONS : aliased RTEMS.EXTENSIONS_TABLE :=
+ (
+ NULL, -- Task create
+ NULL, -- Task start
+ NULL, -- Task restart
+ NULL, -- Task delete
+ SPTEST.TASK_SWITCH'ACCESS, -- Task switch
+ NULL, -- Task begin
+ NULL, -- Task exitted
+ NULL -- Fatal error
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 1, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp05/sptest.adb b/c/src/ada-tests/sptests/sp05/sptest.adb
new file mode 100644
index 0000000000..9313ce4c76
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp05/sptest.adb
@@ -0,0 +1,229 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 5 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:23 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 5 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID2 : RTEMS.ID;
+ TID3 : RTEMS.ID;
+ PASS : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ TID2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
+
+ RTEMS.TASK_IDENT(
+ SPTEST.TASK_NAME( 3 ),
+ 1,
+ TID3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
+
+ for PASS in 1 .. 3
+ loop
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA3" );
+ RTEMS.TASK_SUSPEND( TID3, STATUS );
+ if PASS = 1 then
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ALREADY_SUSPENDED,
+ "TASK_SUSPEND OF TA3"
+ );
+ else
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
+ end if;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA2" );
+ RTEMS.TASK_RESUME( TID2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
+ RTEMS.TASK_SUSPEND( TID2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA3" );
+ RTEMS.TASK_RESUME( TID3, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
+
+ end loop;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend self" );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ loop
+ TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA2" );
+ end loop;
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA3 - task_suspend - suspend self" );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
+
+ loop
+ TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 1 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA3" );
+ end loop;
+
+ end TASK_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp05/sptest.ads b/c/src/ada-tests/sptests/sp05/sptest.ads
new file mode 100644
index 0000000000..d5a5428f56
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp05/sptest.ads
@@ -0,0 +1,139 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 5 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:24 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Message Queue Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp06/sptest.adb b/c/src/ada-tests/sptests/sp06/sptest.adb
new file mode 100644
index 0000000000..b356e302b7
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp06/sptest.adb
@@ -0,0 +1,222 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 6 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:27 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 6 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ SPTEST.ARGUMENT := 0;
+ SPTEST.RESTART_ARGUMENT := 1;
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 10,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ SPTEST.ARGUMENT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ SPTEST.ARGUMENT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.TASK_ID( 3 ),
+ 5,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PASS : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA1 - is beginning to run" );
+
+ PASS := ARGUMENT + 1;
+
+ if PASS = 5 then
+ TEXT_IO.PUT_LINE( "*** END OF TEST 6 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ if PASS = 1 then
+ TEXT_IO.PUT_LINE( "TA1 - restarting TA3" );
+ RTEMS.TASK_RESTART(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.RESTART_ARGUMENT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA3" );
+
+ RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end if;
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_restart - restarting TA2" );
+ RTEMS.TASK_RESTART(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.RESTART_ARGUMENT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA2" );
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_restart - restarting self" );
+ RTEMS.TASK_RESTART( SPTEST.TASK_ID( 1 ), PASS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF SELF" );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA2 - is beginning to run" );
+
+ if ARGUMENT = SPTEST.ARGUMENT then
+ RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ end if;
+
+ loop
+
+ TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1/2 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end loop;
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end TASK_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp06/sptest.ads b/c/src/ada-tests/sptests/sp06/sptest.ads
new file mode 100644
index 0000000000..e54bb9e535
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp06/sptest.ads
@@ -0,0 +1,146 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 6 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:28 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following are used as arguments to the various RTEMS tasks
+-- in this test to indicate when a restart should be performed.
+
+ ARGUMENT : RTEMS.UNSIGNED32;
+ RESTART_ARGUMENT : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp07/sptest.adb b/c/src/ada-tests/sptests/sp07/sptest.adb
new file mode 100644
index 0000000000..db373468ab
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp07/sptest.adb
@@ -0,0 +1,486 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 7 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:32 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 7 ***" );
+
+ SPTEST.EXTENSION_NAME( 1 ) := RTEMS.BUILD_NAME( 'E', 'X', 'T', ' ' );
+
+ RTEMS.EXTENSION_CREATE(
+ SPTEST.EXTENSION_NAME( 1 ),
+ SPTEST.EXTENSIONS'ACCESS,
+ EXTENSION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EXTENSION_CREATE" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+ SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 250,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 4 ),
+ 254,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 4 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 4 ),
+ SPTEST.TASK_4'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+ RTEMS.TASK_RESTART( SPTEST.TASK_ID( 3 ), 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA3" );
+
+ RTEMS.TASK_SET_NOTE( SPTEST.TASK_ID( 1 ), 8, 4, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE OF TA1" );
+ TEXT_IO.PUT( "INIT - task_set_note - set TA1's NOTEPAD_8" );
+ TEXT_IO.PUT_LINE( " to TA1's initial priority: 4" );
+
+ RTEMS.TASK_SET_NOTE( SPTEST.TASK_ID( 2 ), 8, 4, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE OF TA2" );
+ TEXT_IO.PUT( "INIT - task_set_note - set TA2's NOTEPAD_8" );
+ TEXT_IO.PUT_LINE( " to TA2's initial priority: 4" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ THE_PRIORITY : RTEMS.TASK_PRIORITY;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ begin
+
+ TEST_SUPPORT.PAUSE;
+
+ RTEMS.TASK_SET_PRIORITY(
+ RTEMS.SELF,
+ RTEMS.CURRENT_PRIORITY,
+ THE_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+ TEXT_IO.PUT( "TA1 - task_set_priority - ");
+ TEXT_IO.PUT( "get initial priority of self: ");
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+ TEXT_IO.NEW_LINE;
+
+ loop
+
+ RTEMS.TASK_GET_NOTE( RTEMS.SELF, 8, THE_PRIORITY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
+ TEXT_IO.PUT( "TA1 - task_get_note - ");
+ TEXT_IO.PUT( "get NOTEPAD_8 - current priority: " );
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+ TEXT_IO.NEW_LINE;
+
+ THE_PRIORITY := THE_PRIORITY - 1;
+
+ if THE_PRIORITY = 0 then
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
+ RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ TEXT_IO.PUT( "TA1 - task_set_priority - ");
+ TEXT_IO.PUT_LINE( "set priority of TA2 ( blocked )");
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.TASK_ID( 2 ),
+ 5,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end if;
+
+ TEXT_IO.PUT( "TA1 - task_set_note - set TA2's NOTEPAD_8: " );
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_SET_NOTE(
+ SPTEST.TASK_ID( 2 ),
+ 8,
+ THE_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
+
+ TEXT_IO.PUT("TA1 - task_set_priority - set TA2's priority: ");
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.TASK_ID( 2 ),
+ THE_PRIORITY,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ end loop;
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ THE_PRIORITY : RTEMS.TASK_PRIORITY;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ begin
+
+ loop
+
+ RTEMS.TASK_GET_NOTE( RTEMS.SELF, 8, THE_PRIORITY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
+ TEXT_IO.PUT( "TA2 - task_get_note - ");
+ TEXT_IO.PUT( "get NOTEPAD_8 - current priority: " );
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+ TEXT_IO.NEW_LINE;
+
+ THE_PRIORITY := THE_PRIORITY - 1;
+
+ if THE_PRIORITY = 0 then
+ TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend TA1" );
+ RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ TEXT_IO.PUT( "TA2 - task_set_priority - ");
+ TEXT_IO.PUT_LINE( "set priority of TA1 ( blocked )");
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.TASK_ID( 1 ),
+ 5,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ RTEMS.TASK_DELETE(
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ ); -- TA1 is blocked
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
+
+ RTEMS.TASK_DELETE(
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ ); -- TA3 is ready
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ else
+
+ TEXT_IO.PUT( "TA2 - task_set_note - set TA1's NOTEPAD_8: " );
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_SET_NOTE(
+ SPTEST.TASK_ID( 1 ),
+ 8,
+ THE_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
+
+ TEXT_IO.PUT( "TA2 - task_set_priority - ");
+ TEXT_IO.PUT( "set TA1's priority: ");
+ UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2);
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.TASK_ID( 1 ),
+ THE_PRIORITY,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ end if;
+
+ end loop;
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ loop
+
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ end loop;
+
+ end TASK_3;
+
+--PAGE
+--
+-- TASK_4
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ TEXT_IO.PUT_LINE( "TA4 - exitting task" );
+
+ end TASK_4;
+
+--PAGE
+--
+-- TASK_EXIT_EXTENSION
+--
+
+ procedure TASK_EXIT_EXTENSION (
+ RUNNING_TASK : in RTEMS.TCB_POINTER
+ ) is
+ begin
+
+ if TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) > 0 then
+ TEXT_IO.PUT_LINE( "TASK_EXITTED - user extension invoked correctly" );
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 7 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_EXIT_EXTENSION;
+
+--PAGE
+--
+-- TASK_CREATE_EXTENSION
+--
+
+ procedure TASK_CREATE_EXTENSION (
+ UNUSED : in RTEMS.TCB_POINTER;
+ CREATED_TASK : in RTEMS.TCB_POINTER
+ ) is
+ begin
+
+ if TEST_SUPPORT.TASK_NUMBER( CREATED_TASK.OBJECT.ID ) > 0 then
+ TEXT_IO.PUT( "TASKS_CREATE - " );
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME(
+ TEST_SUPPORT.TASK_NUMBER( CREATED_TASK.OBJECT.ID )
+ ),
+ FALSE
+ );
+ TEXT_IO.PUT_LINE( "- created." );
+ end if;
+
+ end TASK_CREATE_EXTENSION;
+
+--PAGE
+--
+-- TASK_DELETE_EXTENSION
+--
+
+ procedure TASK_DELETE_EXTENSION (
+ RUNNING_TASK : in RTEMS.TCB_POINTER;
+ DELETED_TASK : in RTEMS.TCB_POINTER
+ ) is
+ begin
+
+ if TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) > 0 then
+ TEXT_IO.PUT( "TASKS_DELETE - " );
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME(
+ TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID )
+ ),
+ FALSE
+ );
+ end if;
+
+ if TEST_SUPPORT.TASK_NUMBER( DELETED_TASK.OBJECT.ID ) > 0 then
+ TEXT_IO.PUT( "deleting " );
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME(
+ TEST_SUPPORT.TASK_NUMBER( DELETED_TASK.OBJECT.ID )
+ ),
+ TRUE
+ );
+ end if;
+
+ end TASK_DELETE_EXTENSION;
+
+--PAGE
+--
+-- TASK_RESTART_EXTENSION
+--
+
+ procedure TASK_RESTART_EXTENSION (
+ UNUSED : in RTEMS.TCB_POINTER;
+ RESTARTED_TASK : in RTEMS.TCB_POINTER
+ ) is
+ begin
+
+ if TEST_SUPPORT.TASK_NUMBER( RESTARTED_TASK.OBJECT.ID ) > 0 then
+ TEXT_IO.PUT( "TASKS_RESTART - " );
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME(
+ TEST_SUPPORT.TASK_NUMBER( RESTARTED_TASK.OBJECT.ID )
+ ),
+ FALSE
+ );
+ TEXT_IO.PUT_LINE( " - restarted." );
+ end if;
+
+ end TASK_RESTART_EXTENSION;
+
+--PAGE
+--
+-- TASK_START_EXTENSION
+--
+
+ procedure TASK_START_EXTENSION (
+ UNUSED : in RTEMS.TCB_POINTER;
+ STARTED_TASK : in RTEMS.TCB_POINTER
+ ) is
+ begin
+
+ if TEST_SUPPORT.TASK_NUMBER( STARTED_TASK.OBJECT.ID ) > 0 then
+ TEXT_IO.PUT( "TASKS_START - " );
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME(
+ TEST_SUPPORT.TASK_NUMBER( STARTED_TASK.OBJECT.ID )
+ ),
+ FALSE
+ );
+ TEXT_IO.PUT_LINE( " - started." );
+ end if;
+
+ end TASK_START_EXTENSION;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp07/sptest.ads b/c/src/ada-tests/sptests/sp07/sptest.ads
new file mode 100644
index 0000000000..ff75d8e67e
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp07/sptest.ads
@@ -0,0 +1,240 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 7 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:33 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS extensions created
+-- by this test.
+--
+
+ EXTENSION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ EXTENSION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_4
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Message Queue Manager.
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_CREATE_EXTENSION
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the TASK_CREATE extension for this test.
+--
+
+ procedure TASK_CREATE_EXTENSION (
+ UNUSED : in RTEMS.TCB_POINTER;
+ CREATED_TASK : in RTEMS.TCB_POINTER
+ );
+
+--
+-- TASK_DELETE_EXTENSION
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the TASK_DELETE extension for this test.
+--
+
+ procedure TASK_DELETE_EXTENSION (
+ RUNNING_TASK : in RTEMS.TCB_POINTER;
+ DELETED_TASK : in RTEMS.TCB_POINTER
+ );
+
+--
+-- TASK_RESTART_EXTENSION
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the TASK_RESTART extension for this test.
+--
+
+ procedure TASK_RESTART_EXTENSION (
+ UNUSED : in RTEMS.TCB_POINTER;
+ RESTARTED_TASK : in RTEMS.TCB_POINTER
+ );
+
+--
+-- TASK_START_EXTENSION
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the TASK_START extension for this test.
+--
+
+ procedure TASK_START_EXTENSION (
+ UNUSED : in RTEMS.TCB_POINTER;
+ STARTED_TASK : in RTEMS.TCB_POINTER
+ );
+
+--
+-- TASK_EXIT_EXTENSION
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the TASK_EXIT extension for this test.
+-- It is invoked when a RTEMS task exits from its entry point.
+--
+
+ procedure TASK_EXIT_EXTENSION (
+ RUNNING_TASK : in RTEMS.TCB_POINTER
+ );
+
+--
+-- This is the User Extension Table for this test.
+--
+
+ EXTENSIONS : aliased RTEMS.EXTENSIONS_TABLE :=
+ (
+ SPTEST.TASK_CREATE_EXTENSION'ACCESS, -- Task create
+ SPTEST.TASK_START_EXTENSION'ACCESS, -- Task start
+ SPTEST.TASK_RESTART_EXTENSION'ACCESS, -- Task restart
+ SPTEST.TASK_DELETE_EXTENSION'ACCESS, -- Task delete
+ NULL, -- Task switch
+ NULL, -- Task begin
+ SPTEST.TASK_EXIT_EXTENSION'ACCESS, -- Task exitted
+ NULL -- Fatal error
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 1, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp08/sptest.adb b/c/src/ada-tests/sptests/sp08/sptest.adb
new file mode 100644
index 0000000000..722af5d6b4
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp08/sptest.adb
@@ -0,0 +1,351 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 8 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:36 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 8 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PUT_MODE
+--
+
+ procedure PUT_MODE(
+ COMMENT : in STRING;
+ OUTPUT_MODE : in RTEMS.MODE
+ ) is
+ begin
+
+ TEXT_IO.PUT( COMMENT );
+ UNSIGNED32_IO.PUT( OUTPUT_MODE, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ end PUT_MODE;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PREVIOUS_MODE : RTEMS.MODE;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+-- BEGINNING OF ASR
+
+ RTEMS.TASK_MODE(
+ RTEMS.ASR,
+ RTEMS.ASR_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - ASR - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_ASR,
+ RTEMS.ASR_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - NO_ASR - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_ASR,
+ RTEMS.ASR_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - NO_ASR - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.ASR,
+ RTEMS.ASR_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - ASR - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+-- END OF ASR
+
+-- BEGINNING OF TIMESLICE
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_TIMESLICE,
+ RTEMS.TIMESLICE_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - NO_TIMESLICE - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.TIMESLICE,
+ RTEMS.TIMESLICE_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - TIMESLICE - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.TIMESLICE,
+ RTEMS.TIMESLICE_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - TIMESLICE - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_TIMESLICE,
+ RTEMS.TIMESLICE_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - NO_TIMESLICE - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+-- END OF TIMESLICE
+
+-- BEGINNING OF PREEMPT
+
+ RTEMS.TASK_MODE(
+ RTEMS.PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - PREEMPT - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - NO_PREEMPT - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - NO_PREEMPT - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - PREEMPT - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+-- END OF PREEMPT
+
+-- BEGINNING OF INTERRUPT LEVEL
+
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 3 ),
+ RTEMS.INTERRUPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - INTERRUPT_LEVEL( 3 ) - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 5 ),
+ RTEMS.INTERRUPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - INTERRUPT_LEVEL( 5 ) - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+-- END OF INTERRUPT LEVEL
+
+-- BEGINNING OF COMBINATIONS
+
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR +
+ RTEMS.TIMESLICE + RTEMS.NO_PREEMPT,
+ RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK +
+ RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - set all modes - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR +
+ RTEMS.TIMESLICE + RTEMS.NO_PREEMPT,
+ RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK +
+ RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - set all modes - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 0 ) + RTEMS.ASR +
+ RTEMS.NO_TIMESLICE + RTEMS.PREEMPT,
+ RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK +
+ RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - clear all modes - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+-- END OF COMBINATIONS
+
+-- BEGINNING OF CURRENT MODE
+
+ RTEMS.TASK_MODE(
+ RTEMS.CURRENT_MODE,
+ RTEMS.CURRENT_MODE,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+ SPTEST.PUT_MODE(
+ "TA1 - task_mode - get current mode - previous mode: ",
+ PREVIOUS_MODE
+ );
+
+-- END OF CURRENT MODE
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end TASK_1;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp08/sptest.ads b/c/src/ada-tests/sptests/sp08/sptest.ads
new file mode 100644
index 0000000000..f985758e4d
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp08/sptest.ads
@@ -0,0 +1,129 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 8 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:37 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PUT_MODE
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the COMMENT and the OUTPUT_MODE followed
+-- by a carriage return.
+--
+
+ procedure PUT_MODE(
+ COMMENT : in STRING;
+ OUTPUT_MODE : in RTEMS.MODE
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the TASK_MODE directive of the Task Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp09/sptest.adb b/c/src/ada-tests/sptests/sp09/sptest.adb
new file mode 100644
index 0000000000..9897b5b7ee
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp09/sptest.adb
@@ -0,0 +1,3151 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 9 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:40 joel Exp
+--
+
+with BSP;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 9 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+ SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
+ SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
+ SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME( 'T', 'A', '6', ' ' );
+ SPTEST.TASK_NAME( 7 ) := RTEMS.BUILD_NAME( 'T', 'A', '7', ' ' );
+ SPTEST.TASK_NAME( 8 ) := RTEMS.BUILD_NAME( 'T', 'A', '8', ' ' );
+ SPTEST.TASK_NAME( 9 ) := RTEMS.BUILD_NAME( 'T', 'A', '9', ' ' );
+ SPTEST.TASK_NAME( 10 ) := RTEMS.BUILD_NAME( 'T', 'A', 'A', ' ' );
+
+ SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+ SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
+ SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
+ SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'M', '3', ' ' );
+
+ SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' );
+ SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME( 'M', 'Q', '2', ' ' );
+
+ SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
+
+ SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
+
+ SPTEST.PORT_NAME( 1 ) := RTEMS.BUILD_NAME( 'D', 'P', '1', ' ' );
+
+ SPTEST.PERIOD_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+-- RTEMS.TASK_CREATE(
+-- SPTEST.TASK_NAME( 1 ),
+-- 4,
+-- 10,
+-- RTEMS.DEFAULT_MODES,
+-- RTEMS.DEFAULT_ATTRIBUTES,
+-- SPTEST.TASK_ID( 1 ),
+-- STATUS
+-- );
+-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+-- STATUS,
+-- RTEMS.INVALID_SIZE,
+-- "TASK_CREATE WITH ILLEGAL STACK SIZE"
+-- );
+ TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_SIZE -- NOT CHECKED" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 0,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_PRIORITY,
+ "TASK_CREATE WITH ILLEGAL PRIORITY"
+ );
+ TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_PRIORITY" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_RESTART(
+ SPTEST.TASK_ID( 1 ),
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INCORRECT_STATE,
+ "TASK_RESTART OF DORMANT TASK"
+ );
+ TEXT_IO.PUT_LINE( "INIT - task_restart - INCORRECT_STATE" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- DELAYED_SUBPROGRAM
+--
+
+ procedure DELAYED_SUBPROGRAM (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ NULL;
+
+ end DELAYED_SUBPROGRAM;
+
+--PAGE
+--
+-- SERVICE_ROUTINE
+--
+
+ procedure SERVICE_ROUTINE (
+ IGNORED : in RTEMS.VECTOR_NUMBER
+ ) is
+ begin
+
+ NULL;
+
+ end SERVICE_ROUTINE;
+
+--PAGE
+--
+-- SCREEN_1
+--
+
+ procedure SCREEN_1
+ is
+ NOTEPAD_VALUE : RTEMS.UNSIGNED32;
+ SELF_ID : RTEMS.ID;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - INVALID_ID" );
+
+-- RTEMS.TASK_GET_NOTE( RTEMS.SELF,
+-- RTEMS.NOTEPAD_INDEX'LAST + 10,
+-- NOTEPAD_VALUE,
+-- STATUS
+-- );
+-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+-- STATUS,
+-- RTEMS.INVALID_NUMBER,
+-- "TASK_GET_NOTE WITH ILLEGAL NOTEPAD"
+-- );
+-- TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_NUMBER" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_get_note - INVALID_NUMBER -- constraint error"
+ );
+
+ RTEMS.TASK_GET_NOTE(
+ 100,
+ RTEMS.NOTEPAD_INDEX'LAST,
+ NOTEPAD_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_GET_NOTE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_ID" );
+
+ RTEMS.TASK_IDENT(
+ RTEMS.SELF,
+ RTEMS.SEARCH_ALL_NODES,
+ SELF_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+ if SELF_ID /= SPTEST.TASK_ID( 1 ) then
+ TEXT_IO.PUT_LINE( "ERROR - task_ident - incorrect ID returned!" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_ident - current task SUCCESSFUL"
+ );
+
+ RTEMS.TASK_IDENT(
+ 100,
+ RTEMS.SEARCH_ALL_NODES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "TASK_IDENT WITH ILLEGAL NAME (local)"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_ident - global INVALID_NAME" );
+
+ RTEMS.TASK_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "TASK_IDENT WITH ILLEGAL NAME (global)"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_ident - local INVALID_NAME" );
+
+ RTEMS.TASK_IDENT( 100, 2, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NODE,
+ "TASK_IDENT WITH ILLEGAL NODE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_ident - INVALID_NODE" );
+
+ RTEMS.TASK_RESTART( 100, 0, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_RESTART WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_restart - INVALID_ID" );
+
+ RTEMS.TASK_RESUME( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_RESUME WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_resume - INVALID_ID" );
+
+ RTEMS.TASK_RESUME( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INCORRECT_STATE,
+ "TASK_RESUME OF READY TASK"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_resume - INCORRECT_STATE" );
+
+-- RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 512, PREVIOUS_PRIORITY, STATUS );
+-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+-- STATUS,
+-- RTEMS.INVALID_PRIORITY,
+-- "TASK_SET_PRIORITY WITH ILLEGAL PRIORITY"
+-- );
+-- TEXT_IO.PUT_LINE(
+-- "TA1 - task_set_priority - INVALID_PRIORITY"
+-- );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_set_priority - INVALID_PRIORITY -- constraint error"
+ );
+
+ RTEMS.TASK_SET_PRIORITY( 100, 8, PREVIOUS_PRIORITY, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_SET_PRIORITY WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_set_priority - INVALID_ID" );
+
+-- RTEMS.TASK_SET_NOTE( RTEMS.SELF,
+-- RTEMS.NOTEPAD_INDEX'LAST + 10,
+-- NOTEPAD_VALUE,
+-- STATUS
+-- );
+-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+-- STATUS,
+-- RTEMS.INVALID_NUMBER,
+-- "TASK_SET_NOTE WITH ILLEGAL NOTEPAD"
+-- );
+-- TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_NUMBER" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_set_note - INVALID_NUMBER -- constraint error"
+ );
+
+ RTEMS.TASK_SET_NOTE(
+ 100,
+ RTEMS.NOTEPAD_INDEX'LAST,
+ NOTEPAD_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_SET_NOTE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_ID" );
+
+ RTEMS.TASK_START( 100, SPTEST.TASK_1'ACCESS, 0, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_START WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_start - INVALID_ID" );
+
+ RTEMS.TASK_START( RTEMS.SELF, SPTEST.TASK_1'ACCESS, 0, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INCORRECT_STATE,
+ "TASK_START OF READY TASK"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_start - INCORRECT_STATE" );
+
+ RTEMS.TASK_SUSPEND( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_SUSPEND WITH INVALID ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend - INVALID_ID" );
+
+ end SCREEN_1;
+
+--PAGE
+--
+-- SCREEN_2
+--
+
+ procedure SCREEN_2
+ is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+-- errors before clock is set
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+
+ if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+ TEXT_IO.PUT_LINE(
+ "TA1 - clock_get - NOT_DEFINED -- DID THE BSP SET THE TIME OF DAY?"
+ );
+ else
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "CLOCK_GET BEFORE CLOCK IS SET"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - clock_get - NOT_DEFINED" );
+ end if;
+
+ RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+ TEXT_IO.PUT( "TA1 - task_wake_when - NOT_DEFINED -- " );
+ TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" );
+ else
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "TASK_WAKE_WHEN BEFORE CLOCK IS SET"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_when - NOT_DEFINED" );
+ end if;
+
+ RTEMS.TIMER_FIRE_WHEN(
+ 0,
+ TIME,
+ SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+
+ if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+ TEXT_IO.PUT( "TA1 - task_fire_when - NOT_DEFINED -- " );
+ TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" );
+ else
+
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "TIMER_FIRE_WHEN BEFORE CLOCK IS SET"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - NOT_DEFINED" );
+
+ end if;
+
+-- invalid time of day field
+
+ TIME := ( 1987, 2, 5, 8, 30, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID YEAR"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 15, 5, 8, 30, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID MONTH"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 32, 8, 30, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID DAY"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 5, 25, 30, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID HOUR"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 5, 8, 61, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID MINUTE"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 5, 8, 30, 61, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID SECOND"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 5, 8, 30, 45, TEST_SUPPORT.TICKS_PER_SECOND + 1 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "CLOCK_SET WITH INVALID TICKS PER SECOND"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 5, 8, 30, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEXT_IO.PUT_LINE( " - SUCCESSFUL" );
+
+-- task_wake_when
+
+ TIME := ( 1988, 2, 5, 8, 30, 48, TEST_SUPPORT.TICKS_PER_SECOND + 1 );
+ TEXT_IO.PUT( "TA1 - task_wake_when - TICK INVALID - " );
+ TEXT_IO.PUT_LINE( "sleep about 3 seconds" );
+ RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "TASK_WAKE_WHEN WITH INVALID TICKS PER SECOND"
+ );
+ TEXT_IO.PUT( "TA1 - task_wake_when - TICK INVALID - " );
+ TEXT_IO.PUT_LINE( "woke up SUCCESSFUL" );
+
+ TIME := ( 1961, 2, 5, 8, 30, 48, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" );
+ RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "TASK_WAKE_WHEN WITH INVALID YEAR"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ TIME := ( 1988, 2, 5, 25, 30, 48, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" );
+ RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "TASK_WAKE_WHEN WITH INVALID HOUR"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - current time - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ TIME.MONTH := 1;
+ TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" );
+ RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "TASK_WAKE_WHEN BEFORE CURRENT TIME"
+ );
+ TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+ end SCREEN_2;
+
+--PAGE
+--
+-- SCREEN_3
+--
+
+ procedure SCREEN_3
+ is
+ TASK_NAME : RTEMS.NAME;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TASK_NAME := 1;
+
+ RTEMS.TASK_CREATE(
+ 0,
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "TASK_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - INVALID_NAME"
+ );
+
+ RTEMS.TASK_CREATE(
+ TASK_NAME,
+ 1,
+ BSP.CONFIGURATION.WORKSPACE_SIZE,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "TASK_CREATE WITH A STACK SIZE LARGER THAN THE WORKSPACE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - stack size - UNSATISFIED"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - TA2 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_suspend - suspend TA2 - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.ALREADY_SUSPENDED,
+ "TASK_SUSPEND ON SUSPENDED TA2"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_suspend - suspend TA2 - ALREADY_SUSPENDED"
+ );
+
+ RTEMS.TASK_RESUME( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_resume - TA2 resumed - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - TA3 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 4 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 4 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 4 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 5 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 5 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 5 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 6 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 6 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA6" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 6 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 7 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 7 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA7" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 7 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 8 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 8 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA8" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 8 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 9 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 9 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA9" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 9 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 10 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 10 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA10" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_create - 10 created - SUCCESSFUL"
+ );
+
+ RTEMS.TASK_CREATE(
+ TASK_NAME,
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "TASK_CREATE FOR TOO MANY TASKS"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_create - 11 - TOO_MANY" );
+
+ RTEMS.TASK_CREATE(
+ TASK_NAME,
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.GLOBAL,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.MP_NOT_CONFIGURED,
+ "TASK_CREATE OF GLOBAL TASK IN SINGLE CPU SYSTEM"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - task_create - MP_NOT_CONFIGURED" );
+
+ end SCREEN_3;
+
+--PAGE
+--
+-- SCREEN_4
+--
+
+ procedure SCREEN_4
+ is
+ EVENT_OUT : RTEMS.EVENT_SET;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "EVENT_RECEIVE UNSATISFIED (ALL)"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - UNSATISFIED ( all conditions )"
+ );
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "EVENT_RECEIVE UNSATISFIED (ANY)"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - UNSATISFIED ( any conditions )"
+ );
+
+ TEXT_IO.PUT_LINE( "TA1 - event_receive - timeout in 3 seconds" );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ EVENT_OUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "EVENT_RECEIVE AFTER 3 SECOND TIMEOUT"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - woke with TIMEOUT"
+ );
+
+ RTEMS.EVENT_SEND(
+ 100,
+ RTEMS.EVENT_16,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "EVENT_SEND WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - INVALID_ID"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_wake_after - sleep 1 second - SUCCESSFUL"
+ );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (1 SECOND)" );
+
+ TIME := ( 1988, 2, 5, 8, 30, 45, 0 );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEXT_IO.PUT_LINE( " - SUCCESSFUL" );
+
+ end SCREEN_4;
+
+--PAGE
+--
+-- SCREEN_5
+--
+
+ procedure SCREEN_5
+ is
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_CREATE(
+ 0,
+ 1,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "SEMAPHORE_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_create - INVALID_NAME" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SEMAPHORE_CREATE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 1 - SUCCESSFUL" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 2 ),
+ 1,
+ RTEMS.BINARY_SEMAPHORE,
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SEMAPHORE_CREATE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 2 - SUCCESSFUL" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 3 ),
+ 1,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "SEMAPHORE_CREATE OF TOO MANY"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 3 - TOO_MANY" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.INHERIT_PRIORITY + RTEMS.BINARY_SEMAPHORE + RTEMS.FIFO,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "SEMAPHORE_CREATE OF FIFO INHERIT PRIORITY"
+ );
+ TEXT_IO.PUT_LINE("TA1 - semaphore_create - NOT_DEFINED");
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.INHERIT_PRIORITY + RTEMS.COUNTING_SEMAPHORE + RTEMS.PRIORITY,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "SEMAPHORE_CREATE OF COUNTING_SEMAPHORE INHERIT PRIORITY"
+ );
+ TEXT_IO.PUT_LINE("TA1 - semaphore_create - NOT_DEFINED");
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 1 ),
+ 2,
+ RTEMS.BINARY_SEMAPHORE,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "SEMAPHORE_CREATE OF BINARY_SEMAPHORE with COUNT > 1"
+ );
+ TEXT_IO.PUT_LINE("TA1 - semaphore_create - INVALID_NUMBER");
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 3 ),
+ 1,
+ RTEMS.GLOBAL,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.MP_NOT_CONFIGURED,
+ "SEMAPHORE_CREATE OF MP_NOT_CONFIGURED"
+ );
+ TEXT_IO.PUT_LINE("TA1 - semaphore_create - MP_NOT_CONFIGURED");
+
+ RTEMS.SEMAPHORE_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "SEMAPHORE_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_delete - unknown INVALID_ID"
+ );
+
+ RTEMS.SEMAPHORE_DELETE( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "SEMAPHORE_DELETE WITH LOCAL ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_delete - local INVALID_ID"
+ );
+
+ RTEMS.SEMAPHORE_IDENT(
+ 100,
+ RTEMS.SEARCH_ALL_NODES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "SEMAPHORE_IDENT WITH ILLEGAL NAME (local)"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_ident - global INVALID_NAME"
+ );
+
+ RTEMS.SEMAPHORE_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "SEMAPHORE_IDENT WITH ILLEGAL NAME (global)"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_ident - local INVALID_NAME"
+ );
+
+ end SCREEN_5;
+
+--PAGE
+--
+-- SCREEN_6
+--
+
+ procedure SCREEN_6
+ is
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ 100,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "SEMAPHORE_OBTAIN WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - INVALID_ID" );
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(STATUS, "SEMAPHORE_OBTAIN SUCCESSFUL");
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_obtain - got sem 1 - SUCCESSFUL"
+ );
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "SEMAPHORE_OBTAIN NOT AVAILABLE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - UNSATISFIED" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - timeout in 3 seconds" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "SEMAPHORE_OBTAIN NOT AVAILABLE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_obtain - woke with TIMEOUT"
+ );
+
+ RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_OWNER_OF_RESOURCE,
+ "SEMAPHORE_RELEASE AND NOT OWNER"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_release - NOT_OWNER_OF_RESOURCE"
+ );
+
+ RTEMS.SEMAPHORE_RELEASE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "SEMAPHORE_RELEASE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_release - INVALID_ID" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_start - start TA2 - SUCCESSFUL"
+ );
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+ );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_delete - delete sem 1 - SUCCESSFUL"
+ );
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - binary semaphore" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_delete - delete sem 2 - RESOURCE_IN_USE"
+ );
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.RESOURCE_IN_USE,
+ "SEMAPHORE_DELETE OF SM2"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+ );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TASK_DELETE AFTER THE TASK HAS BEEN DELETED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_delete TA2 - already deleted INVALID_ID"
+ );
+
+ end SCREEN_6;
+
+--PAGE
+--
+-- SCREEN_7
+--
+
+ procedure SCREEN_7
+ is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.MESSAGE_QUEUE_BROADCAST(
+ 100,
+ BUFFER_POINTER,
+ COUNT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "MESSAGE_QUEUE_BROADCAST WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_broadcast - INVALID_ID"
+ );
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ 0,
+ 3,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "MESSAGE_QUEUE_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 1 - INVALID_NAME"
+ );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 1 ),
+ 1,
+ RTEMS.GLOBAL,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.MP_NOT_CONFIGURED,
+ "MESSAGE_QUEUE_CREATE OF MP NOT CONFIGURED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 1 - MP_NOT_CONFIGURED");
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 1 ),
+ 2,
+ RTEMS.LIMIT,
+ SPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 2 ),
+ 1,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "MESSAGE_QUEUE_CREATE OF TOO MANY"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 2 - TOO_MANY"
+ );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "MESSAGE_QUEUE_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_delete - unknown INVALID_ID"
+ );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "MESSAGE_QUEUE_DELETE WITH LOCAL ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_delete - local INVALID_ID"
+ );
+
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ 100,
+ RTEMS.SEARCH_ALL_NODES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "MESSAGE_QUEUE_IDENT WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_ident - INVALID_NAME" );
+
+ RTEMS.MESSAGE_QUEUE_FLUSH( 100, COUNT, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "MESSAGE_QUEUE_FLUSH WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - INVALID_ID" );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ 100,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "MESSAGE_QUEUE_RECEIVE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_receive - INVALID_ID" );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "MESSAGE_QUEUE_RECEIVE UNSATISFIED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_receive - Q 1 - UNSATISFIED"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_receive - Q 1 - timeout in 3 seconds"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "MESSAGE_QUEUE_RECEIVE 3 SECOND TIMEOUT"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_receive - Q 1 - woke up with TIMEOUT"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND( 100, BUFFER_POINTER, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "MESSAGE_QUEUE_SEND WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - INVALID_ID" );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 3 TO Q 1 - TOO_MANY"
+ );
+
+ end SCREEN_7;
+
+--PAGE
+--
+-- SCREEN_8
+--
+
+ procedure SCREEN_8
+ is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_delete - Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 1 ),
+ 2,
+ RTEMS.LIMIT,
+ SPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 3 TO Q 1 - TOO_MANY"
+ );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_delete - Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 1 ),
+ 3,
+ RTEMS.LIMIT,
+ SPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - BUFFER 3 TO Q 1 - UNSATISFIED"
+ );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_delete - Q 1 - SUCCESSFUL"
+ );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 1 ),
+ 2,
+ RTEMS.LIMIT,
+ SPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_start - start TA3 - SUCCESSFUL"
+ );
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+ );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+ RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_delete - delete Q 1 - SUCCESSFUL"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+ );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+ end SCREEN_8;
+
+--PAGE
+--
+-- SCREEN_9
+--
+
+ procedure SCREEN_9
+ is
+ CONVERTED : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ OLD_SERVICE_ROUTINE : RTEMS.ADDRESS;
+ begin
+
+-- RTEMS.INTERRUPT_CATCH(
+-- SPTEST.SERVICE_ROUTINE'ACCESS,
+-- 500,
+-- OLD_SERVICE_ROUTINE,
+-- STATUS
+-- );
+-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+-- STATUS,
+-- RTEMS.INVALID_NUMBER,
+-- "INTERRUPT_CATCH WITH INVALID VECTOR"
+-- );
+-- TEXT_IO.PUT_LINE( "TA1 - interrupt_catch - INVALID_NUMBER" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - interrupt_catch - INVALID_NUMBER -- constraint error"
+ );
+
+ RTEMS.INTERRUPT_CATCH(
+ RTEMS.NULL_ADDRESS,
+ 3,
+ OLD_SERVICE_ROUTINE,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "INTERRUPT_CATCH WITH INVALID HANDLER"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - interrupt_catch - INVALID_ADDRESS" );
+
+ RTEMS.SIGNAL_SEND( 100, RTEMS.SIGNAL_1, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "SIGNAL_SEND WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - signal_send - INVALID_ID" );
+
+ RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "SIGNAL_SEND WITH NO HANDLER"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - signal_send - NOT_DEFINED" );
+
+ RTEMS.PORT_CREATE(
+ 0,
+ SPTEST.INTERNAL_PORT_AREA'ADDRESS,
+ SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ SPTEST.INTERNAL_PORT_AREA'LENGTH,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "PORT_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - port_create - INVALID_NAME" );
+
+ RTEMS.PORT_CREATE(
+ SPTEST.PORT_NAME( 1 ),
+ SPTEST.INTERNAL_PORT_AREA( 1 )'ADDRESS,
+ SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ SPTEST.INTERNAL_PORT_AREA'LENGTH,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "PORT_CREATE WITH ILLEGAL ADDRESS"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - port_create - INVALID_ADDRESS" );
+
+ RTEMS.PORT_CREATE(
+ SPTEST.PORT_NAME( 1 ),
+ SPTEST.INTERNAL_PORT_AREA'ADDRESS,
+ SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ SPTEST.INTERNAL_PORT_AREA'LENGTH,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "PORT_CREATE OF TOO MANY"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - port_create - TOO_MANY" );
+
+ RTEMS.PORT_DELETE( 0, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PORT_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - port_delete - INVALID_ID" );
+
+ RTEMS.PORT_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "PORT_IDENT WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - port_ident - INVALID_NAME" );
+
+ RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+ 100,
+ SPTEST.INTERNAL_PORT_AREA'ADDRESS,
+ CONVERTED,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PORT_INTERNAL_TO_EXTERNAL WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - port_internal_to_external - INVALID_ID"
+ );
+
+ RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+ 100,
+ SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ CONVERTED,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PORT_EXTERNAL_TO_INTERNAL WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - port_external_to_internal - INVALID_ID"
+ );
+
+ end SCREEN_9;
+
+--PAGE
+--
+-- SCREEN_10
+--
+
+ procedure SCREEN_10
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.RATE_MONOTONIC_CREATE( 0, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "RATE_MONOTONIC_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_create - INVALID_NAME"
+ );
+
+ RTEMS.RATE_MONOTONIC_CREATE(
+ SPTEST.PERIOD_NAME( 1 ),
+ SPTEST.PERIOD_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_create - SUCCESSFUL"
+ );
+
+ RTEMS.RATE_MONOTONIC_CREATE(
+ SPTEST.PERIOD_NAME( 1 ),
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "RATE_MONOTONIC_CREATE FOR TOO MANY"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - rate_monotonic_create - TOO_MANY" );
+
+ RTEMS.RATE_MONOTONIC_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "RATE_MONOTONIC_IDENT WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_ident - INVALID_NAME"
+ );
+
+ RTEMS.RATE_MONOTONIC_PERIOD( 100, 5, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "RATE_MONOTONIC_PERIOD WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_period - unknown INVALID_ID"
+ );
+
+ RTEMS.RATE_MONOTONIC_PERIOD( 16#10100#, 5, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "RATE_MONOTONIC_PERIOD WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_period - local INVALID_ID"
+ );
+
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ SPTEST.PERIOD_ID( 1 ),
+ RTEMS.PERIOD_STATUS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "RATE_MONOTONIC_PERIOD STATUS NOT DEFINED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_period( STATUS ) - NOT_DEFINED"
+ );
+
+ RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 100, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD 100 TICKS"
+ );
+ TEXT_IO.PUT( "TA1 - rate_monotonic_period - 100 ticks - " );
+ TEXT_IO.PUT_LINE( "SUCCESSFUL" );
+
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ SPTEST.PERIOD_ID( 1 ),
+ RTEMS.PERIOD_STATUS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD STATUS"
+ );
+ TEXT_IO.PUT( "TA1 - rate_monotonic_period( STATUS ) - " );
+ TEXT_IO.PUT_LINE( "SUCCESSFUL" );
+
+ loop
+
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ SPTEST.PERIOD_ID( 1 ),
+ RTEMS.PERIOD_STATUS,
+ STATUS
+ );
+
+ exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT );
+
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD STATUS WAITING FOR TIMEOUT"
+ );
+
+ end loop;
+ TEXT_IO.PUT( "TA1 - rate_monotonic_period( STATUS ) - " );
+ TEXT_IO.PUT_LINE( "TIMEOUT" );
+
+ RTEMS.RATE_MONOTONIC_CANCEL( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "RATE_MONOTONIC_CANCEL WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_cancel - unknown INVALID_ID"
+ );
+
+ RTEMS.RATE_MONOTONIC_CANCEL( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "RATE_MONOTONIC_CANCEL WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_cancel - local INVALID_ID"
+ );
+
+ RTEMS.RATE_MONOTONIC_CANCEL( SPTEST.PERIOD_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CANCEL" );
+ TEXT_IO.PUT_LINE( "TA1 - rate_monotonic_cancel - SUCCESSFUL" );
+
+ RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 5, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD RESTART"
+ );
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 5, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "RATE_MONOTONIC_PERIOD TIMED OUT"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_period - 5 ticks - TIMEOUT"
+ );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 4 ),
+ SPTEST.TASK_4'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yielding to TA4" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+ RTEMS.RATE_MONOTONIC_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "RATE_MONOTONIC_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_delete - unknown INVALID_ID"
+ );
+
+ RTEMS.RATE_MONOTONIC_DELETE( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "RATE_MONOTONIC_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_delete - local INVALID_ID"
+ );
+
+ RTEMS.RATE_MONOTONIC_DELETE( SPTEST.PERIOD_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_DELETE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - rate_monotonic_delete - SUCCESSFUL"
+ );
+
+ end SCREEN_10;
+
+--PAGE
+--
+-- SCREEN_11
+--
+
+ procedure SCREEN_11
+ is
+ BUFFER_ADDRESS_1 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_2 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_3 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.PARTITION_CREATE(
+ 0,
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 40,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "PARTITION_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_NAME" );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 0,
+ 80,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_SIZE,
+ "PARTITION_CREATE WITH ILLEGAL LENGTH"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - partition_create - length - INVALID_SIZE"
+ );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_SIZE,
+ "PARTITION_CREATE WITH ILLEGAL BUFFER_SIZE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - partition_create - buffer size - INVALID_SIZE"
+ );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 256,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_SIZE,
+ "PARTITION_CREATE WITH BUFFER_SIZE > LENGTH"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - partition_create - length < buffer size - INVALID_SIZE"
+ );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 64,
+ RTEMS.GLOBAL,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.MP_NOT_CONFIGURED,
+ "PARTITION_CREATE OF GLOBAL"
+ );
+ TEXT_IO.PUT_LINE("TA1 - partition_create - MP_NOT_CONFIGURED");
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_BAD_AREA'ADDRESS,
+ 128,
+ 64,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "PARTITION_CREATE WITH BAD ADDRESS"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_ADDRESS" );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 34,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_SIZE,
+ "PARTITION_CREATE WITH UNALIGNED BUFFER_SIZE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_SIZE" );
+
+ RTEMS.PARTITION_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PARTITION_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - partition_delete - unknown INVALID_ID"
+ );
+
+ RTEMS.PARTITION_DELETE( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PARTITION_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - partition_delete - local INVALID_ID"
+ );
+
+ RTEMS.PARTITION_GET_BUFFER( 100, BUFFER_ADDRESS_1, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PARTITION_GET_BUFFER WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - INVALID_ID" );
+
+ RTEMS.PARTITION_IDENT(
+ 0,
+ RTEMS.SEARCH_ALL_NODES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "PARTITION_IDENT WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_ident - INVALID_NAME" );
+
+ RTEMS.PARTITION_RETURN_BUFFER( 100, BUFFER_ADDRESS_1, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "PARTITION_RETURN WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - partition_return_buffer - INVALID_ID"
+ );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 64,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
+ TEXT_IO.PUT_LINE( "TA1 - partition_create - SUCCESSFUL" );
+
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+ 128,
+ 64,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "PARTITION_CREATE OF TOO MANY"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_create - TOO_MANY" );
+
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - SUCCESSFUL" );
+
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - SUCCESSFUL" );
+
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "PARTITION_GET_BUFFER UNSATISFIED"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - UNSATISFIED" );
+
+ RTEMS.PARTITION_DELETE(
+ SPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.RESOURCE_IN_USE,
+ "PARTITION_DELETE WITH BUFFERS IN USE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - partition_delete - RESOURCE_IN_USE" );
+
+ RTEMS.PARTITION_RETURN_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ SPTEST.REGION_GOOD_AREA( 0 )'ADDRESS, -- NOTE: REGION
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "PARTITION_RETURN WITH BUFFER ADDRESS OUT OF PARTITION"
+ );
+ TEXT_IO.PUT( "TA1 - partition_return_buffer - " );
+ TEXT_IO.PUT_LINE( "INVALID_ADDRESS - out of range" );
+
+ RTEMS.PARTITION_RETURN_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ SPTEST.PARTITION_GOOD_AREA( 7 )'ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "PARTITION_RETURN WITH BUFFER ADDRESS NOT ON BOUNDARY"
+ );
+ TEXT_IO.PUT( "TA1 - partition_return_buffer - " );
+ TEXT_IO.PUT_LINE( "INVALID_ADDRESS - not on boundary" );
+
+
+ end SCREEN_11;
+
+--PAGE
+--
+-- SCREEN_12
+--
+
+ procedure SCREEN_12
+ is
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
+ OFFSET : RTEMS.UNSIGNED32;
+ GOOD_FRONT_FLAG : RTEMS.UNSIGNED32;
+ GOOD_BACK_FLAG : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.REGION_CREATE(
+ 0,
+ SPTEST.REGION_GOOD_AREA'ADDRESS,
+ 128,
+ 32,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "REGION_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_NAME" );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 1 ),
+ SPTEST.REGION_BAD_AREA'ADDRESS,
+ 128,
+ 32,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "REGION_CREATE WITH ILLEGAL ADDRESS"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_ADDRESS" );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 1 ),
+ SPTEST.REGION_GOOD_AREA'ADDRESS,
+ 128,
+ 34,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_SIZE,
+ "REGION_CREATE WITH ILLEGAL SIZE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_SIZE" );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 1 ),
+ SPTEST.REGION_GOOD_AREA( SPTEST.REGION_START_OFFSET )'ADDRESS,
+ SPTEST.REGION_LENGTH,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.REGION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE" );
+ TEXT_IO.PUT_LINE( "TA1 - region_create - SUCCESSFUL" );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 1 ),
+ SPTEST.REGION_GOOD_AREA'ADDRESS,
+ 128,
+ 32,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "REGION_CREATE FOR TOO MANY"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_create - TOO_MANY" );
+
+ RTEMS.REGION_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "REGION_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_delete - unknown INVALID_ID" );
+
+ RTEMS.REGION_DELETE( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "REGION_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_delete - local INVALID_ID" );
+
+ RTEMS.REGION_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "REGION_IDENT WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_ident - INVALID_NAME" );
+
+ RTEMS.REGION_GET_SEGMENT(
+ 100,
+ 128,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "REGION_GET_SEGMENT WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_get_segment - INVALID_ID" );
+
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ RTEMS.UNSIGNED32'LAST,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_SIZE,
+ "REGION_GET_SEGMENT WITH ILLEGAL SIZE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_get_segment - INVALID_SIZE" );
+
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 384,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT_LINE( "TA1 - region_get_segment - SUCCESSFUL" );
+
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 384,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "REGION_GET_SEGMENT UNSATISFIED"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_get_segment - UNSATISFIED" );
+
+ TEXT_IO.PUT_LINE( "TA1 - region_get_segment - timeout in 3 seconds" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 128,
+ RTEMS.DEFAULT_OPTIONS,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SEGMENT_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TIMEOUT,
+ "REGION_GET_SEGMENT TIMEOUT"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_get_segment - woke up with TIMEOUT"
+ );
+
+ RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.RESOURCE_IN_USE,
+ "REGION_DELETE WITH BUFFERS IN USE"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_delete - RESOURCE_IN_USE" );
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ 100,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "REGION_RETURN_SEGMENT WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - region_return_segment - INVALID_ID" );
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SPTEST.REGION_GOOD_AREA'ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "REGION_RETURN_SEGMENT WITH ILLEGAL SEGMENT"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_return_segment - INVALID_ADDRESS"
+ );
+
+ -- internal heap errors, subject to change if heap code changes
+
+ TEXT_IO.PUT_LINE( "TA1 - debug_disable - DEBUG_REGION" );
+ RTEMS.DEBUG_DISABLE( RTEMS.DEBUG_REGION );
+
+ OFFSET := RTEMS.SUBTRACT(
+ SEGMENT_ADDRESS_1,
+ SPTEST.REGION_GOOD_AREA'ADDRESS
+ ) / 4;
+
+ -- bad FRONT_FLAG error
+
+ GOOD_FRONT_FLAG := SPTEST.REGION_GOOD_AREA( OFFSET - 1 );
+ SPTEST.REGION_GOOD_AREA( OFFSET - 1 ) := GOOD_FRONT_FLAG + 2;
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "REGION_RETURN_SEGMENT WITH BACK_FLAG /= FRONT_FLAG"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_return_segment - INVALID_ADDRESS"
+ );
+
+ SPTEST.REGION_GOOD_AREA( OFFSET - 1 ) := GOOD_FRONT_FLAG;
+
+ -- bad BACK_FLAG error
+
+ GOOD_BACK_FLAG := SPTEST.REGION_GOOD_AREA( OFFSET - 2 );
+ SPTEST.REGION_GOOD_AREA( OFFSET - 2 ) := 1024;
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "REGION_RETURN_SEGMENT WITH BACK_FLAG /= FRONT_FLAG"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_return_segment - INVALID_ADDRESS"
+ );
+
+ SPTEST.REGION_GOOD_AREA( OFFSET - 2 ) := GOOD_BACK_FLAG;
+
+ TEXT_IO.PUT_LINE( "TA1 - debug_enable - DEBUG_REGION" );
+ RTEMS.DEBUG_ENABLE( RTEMS.DEBUG_REGION );
+
+ RTEMS.REGION_EXTEND(
+ 100,
+ SPTEST.REGION_GOOD_AREA'ADDRESS,
+ 128,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "REGION_EXTEND WITH INVALID_ID"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_extend - INVALID_ID"
+ );
+
+ RTEMS.REGION_EXTEND(
+ SPTEST.REGION_ID( 1 ),
+ SPTEST.REGION_GOOD_AREA( SPTEST.REGION_START_OFFSET + 16 )'ADDRESS,
+ 128,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ADDRESS,
+ "REGION_EXTEND WITH INVALID_ADDRESS"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_extend - within heap - INVALID_ADDRESS"
+ );
+
+ RTEMS.REGION_EXTEND(
+ SPTEST.REGION_ID( 1 ),
+ SPTEST.REGION_BAD_AREA'ADDRESS,
+ 128,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_IMPLEMENTED,
+ "REGION_EXTEND WITH NOT_IMPLEMENTED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_extend - non-contiguous lower - NOT_IMPLEMENTED"
+ );
+
+ RTEMS.REGION_EXTEND(
+ SPTEST.REGION_ID( 1 ),
+ SPTEST.REGION_GOOD_AREA(
+ SPTEST.REGION_START_OFFSET - SPTEST.REGION_LENGTH )'ADDRESS,
+ 128,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_IMPLEMENTED,
+ "REGION_EXTEND WITH NOT_IMPLEMENTED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_extend - contiguous lower - NOT_IMPLEMENTED"
+ );
+
+ RTEMS.REGION_EXTEND(
+ SPTEST.REGION_ID( 1 ),
+ SPTEST.REGION_GOOD_AREA(
+ SPTEST.REGION_START_OFFSET + SPTEST.REGION_LENGTH + 16 )'ADDRESS,
+ 128,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_IMPLEMENTED,
+ "REGION_EXTEND WITH NOT_IMPLEMENTED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_extend - non-contiguous higher - NOT_IMPLEMENTED"
+ );
+
+ end SCREEN_12;
+
+--PAGE
+--
+-- SCREEN_13
+--
+
+ procedure SCREEN_13
+ is
+ RESULT : RTEMS.UNSIGNED32;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.IO_CLOSE(
+ RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RESULT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_CLOSE WITH BAD MAJOR NUMBER"
+ );
+ TEXT_IO.PUT_LINE("TA1 - io_close - INVALID_NUMBER");
+
+ RTEMS.IO_CONTROL(
+ RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RESULT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_CONTROL WITH BAD MAJOR NUMBER"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_control - INVALID_NUMBER"
+ );
+
+ RTEMS.IO_INITIALIZE(
+ RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RESULT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_INITIALIZE WITH BAD MAJOR NUMBER"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_initialize - INVALID_NUMBER"
+ );
+
+ RTEMS.IO_OPEN(
+ RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RESULT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_OPEN WITH BAD MAJOR NUMBER"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - io_open - INVALID_NUMBER" );
+
+ RTEMS.IO_READ(
+ RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RESULT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_READ WITH BAD MAJOR NUMBER"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - io_read - INVALID_NUMBER" );
+
+ RTEMS.IO_WRITE(
+ RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RESULT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_WRITE WITH BAD MAJOR NUMBER"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - io_write - INVALID_NUMBER" );
+
+ TIME := ( 2000, 12, 31, 23, 59, 59, 0 );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_set - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_get - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+
+ TIME := ( 1999, 12, 31, 23, 59, 59, 0 );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_set - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_get - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+
+ TIME := ( 2100, 12, 31, 23, 59, 59, 0 );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_set - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_get - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+
+ TIME := ( 2099, 12, 31, 23, 59, 59, 0 );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_set - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_get - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+
+ TIME := ( 1991, 12, 31, 23, 59, 59, 0 );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_set - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - clock_get - ",
+ TIME,
+ " - SUCCESSFUL"
+ );
+ TEXT_IO.NEW_LINE;
+
+ end SCREEN_13;
+
+--PAGE
+--
+-- SCREEN_14
+--
+
+ procedure SCREEN_14
+ is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TIMER_CREATE( 0, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "TIMER_CREATE WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_create - INVALID_NAME" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 1 ),
+ SPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+ TEXT_IO.PUT_LINE( "TA1 - timer_create - 1 - SUCCESSFUL" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 1 ),
+ SPTEST.JUNK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.TOO_MANY,
+ "TIMER_CREATE FOR TOO MANY"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_create - 2 - TOO_MANY" );
+
+ RTEMS.TIMER_DELETE( 100, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TIMER_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_delete - local INVALID_ID" );
+
+ RTEMS.TIMER_DELETE( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TIMER_DELETE WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_delete - global INVALID_ID" );
+
+ RTEMS.TIMER_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NAME,
+ "TIMER_IDENT WITH ILLEGAL NAME"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_ident - INVALID_NAME" );
+
+ RTEMS.TIMER_CANCEL( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TIMER_CANCEL WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_cancel - INVALID_ID" );
+
+ RTEMS.TIMER_RESET( 16#10100#, STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TIMER_RESET WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_reset - INVALID_ID" );
+
+ RTEMS.TIMER_RESET( SPTEST.TIMER_ID( 1 ), STATUS );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_DEFINED,
+ "TIMER_RESET BEFORE INITIATED"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_reset - NOT_DEFINED" );
+
+ RTEMS.TIMER_FIRE_AFTER(
+ 16#10100#,
+ 5 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TIMER_FIRE_AFTER WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_fire_after - INVALID_ID" );
+
+ TIME := ( 1994, 12, 31, 1, 0, 0, 0 );
+ RTEMS.TIMER_FIRE_WHEN(
+ 16#10100#,
+ TIME,
+ SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_ID,
+ "TIMER_FIRE_WHEN WITH ILLEGAL ID"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - INVALID_ID" );
+
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ 0,
+ SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "TIMER_FIRE_AFTER WITH 0 TICKS"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - timer_fire_after - INVALID_NUMBER" );
+
+ TIME := ( 1987, 2, 5, 8, 30, 45, 0 );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 1 ),
+ TIME,
+ SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "TIMER_FIRE_WHEN WITH ILLEGAL TIME"
+ );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - timer_fire_when - ",
+ TIME,
+ " - INVALID_CLOCK"
+ );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ TIME := ( 1990, 2, 5, 8, 30, 45, 0 );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 1 ),
+ TIME,
+ SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_CLOCK,
+ "TIMER_FIRE_WHEN BEFORE CURRENT TIME"
+ );
+ TEST_SUPPORT.PRINT_TIME(
+ "TA1 - timer_fire_when - ",
+ TIME,
+ " - before INVALID_CLOCK"
+ );
+ TEXT_IO.NEW_LINE;
+
+ end SCREEN_14;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ SPTEST.SCREEN_1;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 2 );
+
+ SPTEST.SCREEN_2;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 3 );
+
+ SPTEST.SCREEN_3;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 4 );
+
+ SPTEST.SCREEN_4;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 5 );
+
+ SPTEST.SCREEN_5;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 6 );
+
+ SPTEST.SCREEN_6;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 7 );
+
+ SPTEST.SCREEN_7;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 8 );
+
+ SPTEST.SCREEN_8;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 9 );
+
+ SPTEST.SCREEN_9;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 10 );
+
+ SPTEST.SCREEN_10;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 11 );
+
+ SPTEST.SCREEN_11;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 12 );
+
+ SPTEST.SCREEN_12;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 13 );
+
+ SPTEST.SCREEN_13;
+ TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 14 );
+
+ SPTEST.SCREEN_14;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 9 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - sem 1 - WAIT FOREVER" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.OBJECT_WAS_DELETED,
+ "SEMAPHORE_OBTAIN WAITING TO BE DELETED"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA2 - semaphore_obtain - woke up with OBJECT_WAS_DELETED"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - task_delete - delete self - SUCCESSFUL"
+ );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TEXT_IO.PUT_LINE(
+ "TA3 - message_queue_receive - Q 1 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.OBJECT_WAS_DELETED,
+ "MESSAGE_QUEUE_RECEIVE WAITING TO BE DELETED"
+ );
+ TEXT_IO.PUT( "TA3 - message_queue_receive - woke up " );
+ TEXT_IO.PUT_LINE( "with OBJECT_WAS_DELETED" );
+
+ TEXT_IO.PUT_LINE(
+ "TA3 - task_delete - delete self - SUCCESSFUL"
+ );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+ end TASK_3;
+
+--PAGE
+--
+-- TASK_4
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.RATE_MONOTONIC_CANCEL(
+ SPTEST.PERIOD_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_OWNER_OF_RESOURCE,
+ "RATE_MONOTONIC_CANCEL NOT THE OWNER"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA4 - rate_monotonic_cancel - NOT_OWNER_OF_RESOURCE"
+ );
+
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ SPTEST.PERIOD_ID( 1 ),
+ 5,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.NOT_OWNER_OF_RESOURCE,
+ "RATE_MONOTONIC_PERIOD NOT THE OWNER"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA4 - rate_monotonic_period - NOT_OWNER_OF_RESOURCE"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA4 - task_delete - delete self - SUCCESSFUL"
+ );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+
+
+ end TASK_4;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp09/sptest.ads b/c/src/ada-tests/sptests/sp09/sptest.ads
new file mode 100644
index 0000000000..a0c14acc7c
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp09/sptest.ads
@@ -0,0 +1,444 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 9 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:42 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+with SYSTEM;
+with System.Storage_Elements;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 11 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 11 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS semaphores created
+-- by this test.
+--
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message queues
+-- created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS partitions created
+-- by this test.
+--
+
+ PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS regions created
+-- by this test.
+--
+
+ REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS ports created
+-- by this test.
+--
+
+ PORT_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ PORT_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS periods created
+-- by this test.
+--
+
+ PERIOD_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ PERIOD_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- This variable is used as the output ID on directives which return
+-- an ID but are invoked in a manner which returns a non-SUCCESSFUL
+-- status code.
+--
+
+ JUNK_ID : RTEMS.ID;
+
+--
+-- The following area defines a memory area to be used as the
+-- internal address space of the port.
+--
+
+ INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00001000#);
+
+ INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- external address space of the port.
+--
+
+ EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00002000#);
+
+ EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a partition.
+--
+
+ PARTITION_GOOD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for PARTITION_GOOD_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a partition which starts at an invalid address.
+--
+
+ PARTITION_BAD_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00000006#);
+
+ PARTITION_BAD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for PARTITION_BAD_AREA use at PARTITION_BAD_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a region and constants used to define the regions
+-- starting area and length.
+--
+
+ REGION_GOOD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 4095 )
+ of RTEMS.UNSIGNED32;
+ for REGION_GOOD_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+ REGION_START_OFFSET : constant RTEMS.UNSIGNED32 := 1024;
+ REGION_LENGTH : constant RTEMS.UNSIGNED32 := 512;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a region which starts at an invalid address.
+--
+
+ REGION_BAD_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00000006#);
+
+ REGION_BAD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for REGION_BAD_AREA use at REGION_BAD_AREA_ADDRESS;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- DELAYED_SUBPROGRAM
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled as a timer service routine.
+-- It performs no actions if it fires.
+--
+
+ procedure DELAYED_SUBPROGRAM (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests numerous error conditions.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests numerous error conditions.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests numerous error conditions.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_4
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests numerous error conditions.
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- SERVICE_ROUTINE
+--
+-- DESCRIPTION:
+--
+-- This subprogram serves as a dummy ISR which is installed at an
+-- illegal vector number.
+--
+
+ procedure SERVICE_ROUTINE (
+ IGNORED : in RTEMS.VECTOR_NUMBER
+ );
+
+--
+-- SCREEN_1
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_1;
+
+--
+-- SCREEN_2
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_2;
+
+--
+-- SCREEN_3
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_3;
+
+--
+-- SCREEN_4
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_4;
+
+--
+-- SCREEN_5
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_5;
+
+--
+-- SCREEN_6
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_6;
+
+--
+-- SCREEN_7
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_7;
+
+--
+-- SCREEN_8
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_8;
+
+--
+-- SCREEN_9
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_9;
+
+--
+-- SCREEN_10
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_10;
+
+--
+-- SCREEN_11
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_11;
+
+--
+-- SCREEN_12
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_12;
+
+--
+-- SCREEN_13
+--
+-- DESCRIPTION:
+--
+-- This subprogram processes the a single output screen of this test.
+--
+
+ procedure SCREEN_13;
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 2, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 2, -- maximum # messages
+ 1, -- maximum # partitions
+ 1, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 1, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp11/sptest.adb b/c/src/ada-tests/sptests/sp11/sptest.adb
new file mode 100644
index 0000000000..b9a73a252f
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp11/sptest.adb
@@ -0,0 +1,900 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 11 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:45 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 11 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+ SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
+ SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'M', '3', ' ' );
+ SPTEST.TIMER_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'M', '4', ' ' );
+ SPTEST.TIMER_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'M', '5', ' ' );
+ SPTEST.TIMER_NAME( 6 ) := RTEMS.BUILD_NAME( 'T', 'M', '6', ' ' );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 1 ),
+ SPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 2 ),
+ SPTEST.TIMER_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM2" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 3 ),
+ SPTEST.TIMER_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM3" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 4 ),
+ SPTEST.TIMER_ID( 4 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM4" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 5 ),
+ SPTEST.TIMER_ID( 5 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM5" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 6 ),
+ SPTEST.TIMER_ID( 6 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM6" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ EVENTOUT : RTEMS.EVENT_SET;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ INDEX : RTEMS.UNSIGNED32;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_16 to TA2" );
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_16, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 16" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - waiting forever on EVENT_14 and EVENT_15"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_14 + RTEMS.EVENT_15,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14 and 15" );
+ TEXT_IO.PUT( "TA1 - EVENT_14 and EVENT_15 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_18 to TA2" );
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_18, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - waiting with 10 second timeout on EVENT_14"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_14,
+ RTEMS.DEFAULT_OPTIONS,
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14" );
+ TEXT_IO.PUT( "TA1 - EVENT_14 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_19 to TA2" );
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_19, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 19" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_18 to self after 5 seconds"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ 5 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - waiting forever on EVENT_18"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_18,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 18" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+
+ TEXT_IO.PUT( "TA1 - EVENT_18 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_3 to self" );
+ RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_3, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 3" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - EVENT_3 or EVENT_22 - NO_WAIT and EVENT_ANY"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_3 + RTEMS.EVENT_22,
+ RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 3 and 22" );
+ TEXT_IO.PUT( "TA1 - EVENT_3 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_4 to self" );
+ RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_4, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 4" );
+
+ TEXT_IO.PUT_LINE(
+"TA1 - event_receive - waiting forever on EVENT_4 or EVENT_5 - EVENT_ANY"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_4 + RTEMS.EVENT_5,
+ RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 4 and 5" );
+ TEXT_IO.PUT( "TA1 - EVENT_4 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_18 to self after 5 seconds"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ 5 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - timer_cancel - cancelling timer for event EVENT_18"
+ );
+ RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_8 to self after 60 seconds"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ 60 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.TA1_SEND_8_TO_SELF_60_SECONDS'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_9 to self after 60 seconds"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 2 ),
+ 60 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.TA1_SEND_9_TO_SELF_60_SECONDS'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_10 to self after 60 seconds"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 3 ),
+ 60 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - timer_cancel - cancelling timer for event EVENT_8"
+ );
+ RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+ TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
+
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_1 every second"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.TA1_SEND_1_TO_SELF_EVERY_SECOND'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 1 SECOND" );
+
+ INDEX := 0;
+
+ loop
+
+ exit when INDEX = 3;
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_1,
+ RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 1" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+
+ TEXT_IO.PUT( "TA1 - EVENT_1 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEST_SUPPORT.PRINT_TIME( " - at ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ if INDEX < 2 then
+ RTEMS.TIMER_RESET( SPTEST.TIMER_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 TIMER RESET" );
+ end if;
+
+ INDEX := INDEX + 1;
+ end loop;
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - timer_cancel - cancelling timer for event EVENT_1"
+ );
+ RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+ TEST_SUPPORT.PAUSE;
+
+ TIME.DAY := 13;
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_11 to self in 1 day"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 1 ),
+ TIME,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
+
+ TIME.HOUR := 7;
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_11 to self in 1 day"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 2 ),
+ TIME,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
+ TIME.HOUR := 8;
+
+ TIME.DAY := 14;
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_11 to self in 2 days"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 3 ),
+ TIME,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - timer_cancel - cancelling EVENT_11 to self in 1 day"
+ );
+ RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - timer_cancel - cancelling EVENT_11 to self in 2 days"
+ );
+ RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - resending EVENT_11 to self in 2 days"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 3 ),
+ TIME,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
+
+ TIME.DAY := 15;
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive - waiting forever on EVENT_11"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_11,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 11" );
+ TEXT_IO.PUT( "TA1 - EVENT_11 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEST_SUPPORT.PAUSE;
+
+-- The following code tests the case of deleting a timer ???
+
+ TEXT_IO.PUT_LINE( "TA1 - event_send/event_receive combination" );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ 10,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 10 ticks" );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_11,
+ RTEMS.DEFAULT_OPTIONS,
+ 11,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
+
+ TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
+
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+ TIME.DAY := 13;
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_receive all outstanding events"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.ALL_EVENTS,
+ RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "EVENT_RECEIVE all events"
+ );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_10 to self in 1 day"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 1 ),
+ TIME,
+ SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
+
+ TIME.DAY := 14;
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_11 to self in 2 days"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 2 ),
+ TIME,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
+
+ TIME := ( 1988, 2, 12, 7, 15, 0, 0 );
+
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ TEXT_IO.PUT_LINE( "TA1 - set time backwards" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.ALL_EVENTS,
+ RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ if EVENTOUT >= RTEMS.EVENT_0 then
+ TEXT_IO.PUT( "ERROR - " );
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.PUT_LINE( " events received" );
+ else
+ TEXT_IO.PUT_LINE( "TA1 - no events received" );
+ end if;
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.UNSATISFIED,
+ "EVENT_RECEIVE all events"
+ );
+
+ TIME := ( 1988, 2, 14, 7, 15, 0, 0 );
+
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ TEXT_IO.PUT_LINE( "TA1 - set time forwards (leave a timer)" );
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.ALL_EVENTS,
+ RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE all events" );
+ if EVENTOUT = RTEMS.EVENT_10 then
+ TEXT_IO.PUT_LINE( "TA1 - EVENT_10 received" );
+ else
+ TEXT_IO.PUT( "ERROR - " );
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.PUT_LINE( " events received" );
+ end if;
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_11 to self in 100 ticks"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ 100,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 100 ticks" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - event_send - send EVENT_11 to self in 200 ticks"
+ );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 2 ),
+ 100,
+ SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 200 ticks" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 11 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ EVENTOUT : RTEMS.EVENT_SET;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_receive - waiting forever on EVENT_16"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 16" );
+ TEXT_IO.PUT( "TA2 - EVENT_16 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_send - send EVENT_14 and EVENT_15 to TA1"
+ );
+ RTEMS.EVENT_SEND(
+ SPTEST.TASK_ID( 1 ),
+ RTEMS.EVENT_14 + RTEMS.EVENT_15,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14 and 15" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_receive - waiting forever on EVENT_17 or EVENT_18 - EVENT_ANY"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_17 + RTEMS.EVENT_18,
+ RTEMS.EVENT_ANY,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 17 and 18" );
+ TEXT_IO.PUT( "TA2 - EVENT_17 or EVENT_18 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_send - send EVENT_14 to TA1"
+ );
+ RTEMS.EVENT_SEND(
+ SPTEST.TASK_ID( 1 ),
+ RTEMS.EVENT_14,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14" );
+
+ TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
+
+ TEST_SUPPORT.PRINT_TIME( "TA2 - clock_set - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA2 CLOCK_SET" );
+
+ TIME.SECOND := TIME.SECOND + 5;
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_send - sending EVENT_10 to self after 5 seconds"
+ );
+ RTEMS.TIMER_FIRE_WHEN(
+ SPTEST.TIMER_ID( 5 ),
+ TIME,
+ SPTEST.TA2_SEND_10_TO_SELF'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 5 SECONDS" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_receive - waiting forever on EVENT_10"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_10,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+
+ TEXT_IO.PUT( "TA2 - EVENT_10 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA2 - event_receive - PENDING_EVENTS" );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.PENDING_EVENTS,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
+ TEXT_IO.PUT( "TA2 - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - event_receive - EVENT_19 - NO_WAIT"
+ );
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_19,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ EVENTOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
+ TEXT_IO.PUT( "TA2 - EVENT_19 received - eventout => ");
+ UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA2 - task_delete - deletes self" );
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE of TA2" );
+
+ end TASK_2;
+
+--PAGE
+--
+-- TA1_SEND_18_TO_SELF_5_SECONDS
+--
+
+ procedure TA1_SEND_18_TO_SELF_5_SECONDS (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_18, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
+
+ end TA1_SEND_18_TO_SELF_5_SECONDS;
+
+--PAGE
+--
+-- TA1_SEND_8_TO_SELF_60_SECONDS
+--
+
+ procedure TA1_SEND_8_TO_SELF_60_SECONDS (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_8, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 8" );
+
+ end TA1_SEND_8_TO_SELF_60_SECONDS;
+
+--PAGE
+--
+-- TA1_SEND_9_TO_SELF_60_SECONDS
+--
+
+ procedure TA1_SEND_9_TO_SELF_60_SECONDS (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_9, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 9" );
+
+ end TA1_SEND_9_TO_SELF_60_SECONDS;
+
+--PAGE
+--
+-- TA1_SEND_10_TO_SELF
+--
+
+ procedure TA1_SEND_10_TO_SELF (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_10, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
+
+ end TA1_SEND_10_TO_SELF;
+
+--PAGE
+--
+-- TA1_SEND_1_TO_SELF_EVERY_SECOND
+--
+
+ procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_1, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 1" );
+
+ end TA1_SEND_1_TO_SELF_EVERY_SECOND;
+
+--PAGE
+--
+-- TA1_SEND_11_TO_SELF
+--
+
+ procedure TA1_SEND_11_TO_SELF (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_11, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 11" );
+
+ end TA1_SEND_11_TO_SELF;
+
+--PAGE
+--
+-- TA2_SEND_10_TO_SELF
+--
+
+ procedure TA2_SEND_10_TO_SELF (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ )
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_10, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
+
+ end TA2_SEND_10_TO_SELF;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp11/sptest.ads b/c/src/ada-tests/sptests/sp11/sptest.ads
new file mode 100644
index 0000000000..e8807321f6
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp11/sptest.ads
@@ -0,0 +1,233 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 11 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:47 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
+
+--
+-- TA1_SEND_18_TO_SELF_5_SECONDS
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer after 5 seconds
+-- and to send EVENT_18 to TASK_1.
+--
+
+ procedure TA1_SEND_18_TO_SELF_5_SECONDS (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TA1_SEND_8_TO_SELF_60_SECONDS
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer after 60 seconds
+-- and to send EVENT_8 to TASK_1.
+--
+
+ procedure TA1_SEND_8_TO_SELF_60_SECONDS (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TA1_SEND_9_TO_SELF_5_SECONDS
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer after 60 seconds
+-- and to send EVENT_9 to TASK_1.
+--
+
+ procedure TA1_SEND_9_TO_SELF_60_SECONDS (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TA1_SEND_10_TO_SELF
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer after 60 seconds
+-- and to send EVENT_10 to TASK_1.
+--
+
+ procedure TA1_SEND_10_TO_SELF (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TA1_SEND_1_TO_SELF_EVERY_SECOND
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer every second
+-- and to send EVENT_1 to TASK_1 until the timer is cancelled.
+--
+
+ procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TA1_SEND_11_TO_SELF
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer at a
+-- specific time of day and to send EVENT_11 to TASK_1.
+--
+
+ procedure TA1_SEND_11_TO_SELF (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TA2_SEND_10_TO_SELF
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired by a timer after 5 seconds
+-- and to send EVENT_10 to TASK_2.
+--
+
+ procedure TA2_SEND_10_TO_SELF (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Event and Timer Managers.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Event and Timer Managers.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 6, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp12/sptest.adb b/c/src/ada-tests/sptests/sp12/sptest.adb
new file mode 100644
index 0000000000..5f6d83bcc9
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp12/sptest.adb
@@ -0,0 +1,806 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 12 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:50 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 12 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+ SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
+ SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
+
+ SPTEST.PRIORITY_TASK_NAME( 1 ) :=
+ RTEMS.BUILD_NAME( 'P', 'R', 'I', '1' );
+ SPTEST.PRIORITY_TASK_NAME( 2 ) :=
+ RTEMS.BUILD_NAME( 'P', 'R', 'I', '2' );
+ SPTEST.PRIORITY_TASK_NAME( 3 ) :=
+ RTEMS.BUILD_NAME( 'P', 'R', 'I', '3' );
+ SPTEST.PRIORITY_TASK_NAME( 4 ) :=
+ RTEMS.BUILD_NAME( 'P', 'R', 'I', '4' );
+ SPTEST.PRIORITY_TASK_NAME( 5 ) :=
+ RTEMS.BUILD_NAME( 'P', 'R', 'I', '5' );
+
+ SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
+ SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
+ SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'M', '3', ' ' );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 1 ),
+ 1,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 2 ),
+ 0,
+ RTEMS.PRIORITY,
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 3 ),
+ 1,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.SEMAPHORE_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM3" );
+
+ TEXT_IO.PUT_LINE( "INIT - Forward priority queue test" );
+ SPTEST.PRIORITY_TEST_DRIVER( 0 );
+
+ TEXT_IO.PUT_LINE( "INIT - Backward priority queue test" );
+ SPTEST.PRIORITY_TEST_DRIVER( 32 );
+
+TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE(
+ "INIT - Binary Semaphore and Priority Inheritance Test"
+ );
+
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
+
+ TEXT_IO.PUT_LINE(
+ "INIT - semaphore_create - allocated binary semaphore"
+ );
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 2 ),
+ 0,
+ RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+ TEXT_IO.PUT_LINE(
+ "INIT - semaphore_release - allocated binary semaphore"
+ );
+ RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
+
+ TEXT_IO.PUT_LINE(
+ "INIT - semaphore_delete - allocated binary semaphore"
+ );
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 2 ),
+ 1,
+ RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+ SPTEST.PRIORITY_TEST_DRIVER( 64 );
+
+TEST_SUPPORT.PAUSE;
+
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ SPTEST.SEMAPHORE_NAME( 2 ),
+ 0,
+ RTEMS.PRIORITY,
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+ RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PRIORITY_TEST_DRIVER
+--
+
+ procedure PRIORITY_TEST_DRIVER (
+ PRIORITY_BASE : in RTEMS.UNSIGNED32
+ ) is
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ for INDEX in 1 .. 5
+ loop
+
+ case INDEX is
+ when 1 | 2 | 3 =>
+ SPTEST.TASK_PRIORITY( INDEX ) :=
+ PRIORITY_BASE + RTEMS.TASK_PRIORITY( INDEX );
+ when others =>
+ SPTEST.TASK_PRIORITY( INDEX ) := PRIORITY_BASE + 3;
+ end case;
+
+ RTEMS.TASK_CREATE(
+ SPTEST.PRIORITY_TASK_NAME( INDEX ),
+ SPTEST.TASK_PRIORITY( INDEX ),
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.PRIORITY_TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ end loop;
+
+ if PRIORITY_BASE = 0 then
+
+ for INDEX in 1 .. 5
+ loop
+
+ RTEMS.TASK_START(
+ SPTEST.PRIORITY_TASK_ID( INDEX ),
+ SPTEST.PRIORITY_TASK'ACCESS,
+ RTEMS.TASK_ARGUMENT( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ else
+
+ for INDEX in reverse 1 .. 5
+ loop
+
+ RTEMS.TASK_START(
+ SPTEST.PRIORITY_TASK_ID( INDEX ),
+ SPTEST.PRIORITY_TASK'ACCESS,
+ RTEMS.TASK_ARGUMENT( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER LOOP" );
+
+ if PRIORITY_BASE = 64 then
+ if INDEX = 4 then
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.PRIORITY_TASK_ID( 5 ),
+ PRIORITY_BASE + 4,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEXT_IO.PUT( "PDRV - change priority of PRI5 from " );
+ UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
+ TEXT_IO.PUT( " to " );
+ UNSIGNED32_IO.PUT( PRIORITY_BASE + 4 );
+ TEXT_IO.NEW_LINE;
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "PDRV TASK_SET_PRIORITY"
+ );
+ end if;
+
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.PRIORITY_TASK_ID( 5 ),
+ RTEMS.CURRENT_PRIORITY,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEXT_IO.PUT( "PDRV - priority of PRI5 is " );
+ UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
+ TEXT_IO.NEW_LINE;
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "PDRV TASK_SET_PRIORITY"
+ );
+ end if;
+
+ end loop;
+
+ end if;
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER AFTER LOOP" );
+
+ if PRIORITY_BASE = 0 then
+ for INDEX in 1 .. 5
+ loop
+
+ RTEMS.SEMAPHORE_RELEASE(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SEMAPHORE_RELEASE LOOP"
+ );
+
+ end loop;
+ end if;
+
+ if PRIORITY_BASE = 64 then
+
+ TEXT_IO.PUT_LINE( "PDRV - task_resume - PRI5" );
+ RTEMS.TASK_RESUME( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "TASK_WAKE_AFTER SO PRI5 can run"
+ );
+
+ RTEMS.TASK_DELETE( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PRI5" );
+ else
+
+ for INDEX in 1 .. 5
+ loop
+
+ RTEMS.TASK_DELETE(
+ SPTEST.PRIORITY_TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
+
+ end loop;
+ end if;
+
+
+ end PRIORITY_TEST_DRIVER;
+
+--PAGE
+--
+-- PRIORITY_TASK
+--
+
+ procedure PRIORITY_TASK (
+ ITS_INDEX : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIMEOUT : RTEMS.INTERVAL;
+ ITS_PRIORITY : RTEMS.TASK_PRIORITY;
+ CURRENT_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ ITS_PRIORITY := SPTEST.TASK_PRIORITY( INTEGER( ITS_INDEX ) );
+
+ if ITS_PRIORITY < 3 then
+ TIMEOUT := 5 * TEST_SUPPORT.TICKS_PER_SECOND;
+ else
+ TIMEOUT := RTEMS.NO_TIMEOUT;
+ end if;
+
+ TEST_SUPPORT.PUT_NAME( PRIORITY_TASK_NAME( INTEGER(ITS_INDEX) ), FALSE );
+ TEXT_IO.PUT_LINE( " - semaphore_obtain - wait forever on SM2" );
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ RTEMS.DEFAULT_OPTIONS,
+ TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN OF SM2" );
+
+ if ITS_PRIORITY < 64 then
+ TEXT_IO.PUT( "PRI" );
+ UNSIGNED32_IO.PUT( ITS_INDEX );
+ TEXT_IO.PUT( " - WHY AM I HERE? (priority = " );
+ UNSIGNED32_IO.PUT( ITS_PRIORITY );
+ TEXT_IO.PUT_LINE( " )" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ if ITS_INDEX = 5 then
+ TEXT_IO.PUT_LINE(
+ "PRI5 - task_suspend - until all priority tasks blocked"
+ );
+ end if;
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ TEXT_IO.PUT_LINE( "PRI5 - task_delete - all tasks waiting on SM2" );
+ for INDEX in 1 .. 4
+ loop
+
+ RTEMS.TASK_DELETE( SPTEST.PRIORITY_TASK_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
+
+ end loop;
+
+ TEXT_IO.PUT_LINE( "PRI5 - semaphore_obtain - nested" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ RTEMS.DEFAULT_OPTIONS,
+ TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN NESTED" );
+
+ TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - nested" );
+ RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE NESTED" );
+
+ TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - restore priority" );
+ RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
+
+ RTEMS.TASK_SET_PRIORITY(
+ SPTEST.PRIORITY_TASK_ID( 5 ),
+ RTEMS.CURRENT_PRIORITY,
+ CURRENT_PRIORITY,
+ STATUS
+ );
+ TEXT_IO.PUT( "PRI5 - priority of PRI5 is " );
+ UNSIGNED32_IO.PUT( CURRENT_PRIORITY );
+ TEXT_IO.NEW_LINE;
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "PRI5 TASK_SET_PRIORITY CURRENT"
+ );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+ end PRIORITY_TASK;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ SMID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_IDENT(
+ SPTEST.SEMAPHORE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ SMID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_IDENT OF SM1" );
+ TEXT_IO.PUT( "TA1 - semaphore_ident - smid => " );
+ UNSIGNED32_IO.PUT( SMID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM2" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - got SM2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM3" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 3 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
+
+ TEXT_IO.PUT_LINE( "TA1 - got SM3" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - get SM1 - NO_WAIT" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - got SM1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
+ RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - semaphore_obtain - waiting for SM1 with 10 second timeout"
+ );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_MODES,
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
+
+ TEXT_IO.PUT_LINE( "TA1 - got SM1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM2" );
+ RTEMS.SEMAPHORE_RELEASE(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 4 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 4 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 5 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 5 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 4 ),
+ SPTEST.TASK_4'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 5 ),
+ SPTEST.TASK_5'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
+ RTEMS.SEMAPHORE_RELEASE(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM1" );
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" );
+
+ TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM3" );
+ RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM3" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM1" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+
+ TEXT_IO.PUT_LINE( "TA2 - got SM1" );
+
+ TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM1" );
+ RTEMS.SEMAPHORE_RELEASE(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - task_set_priority - make self highest priority task"
+ );
+ RTEMS.TASK_SET_PRIORITY(
+ RTEMS.SELF,
+ 3,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY ON TA2" );
+
+ TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM2" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
+
+ TEXT_IO.PUT_LINE( "TA2 - got SM2" );
+
+ TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM2" );
+ RTEMS.SEMAPHORE_RELEASE(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
+
+ TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM2" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
+ TEXT_IO.PUT_LINE( "TA3 - got SM2" );
+
+ TEXT_IO.PUT_LINE( "TA3 - semaphore_release - release SM2" );
+ RTEMS.SEMAPHORE_RELEASE(
+ SPTEST.SEMAPHORE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
+
+ TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM3" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 3 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
+
+ end TASK_3;
+
+--PAGE
+--
+-- TASK_4
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA4 - semaphore_obtain - wait forever on SM1" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+
+ end TASK_4;
+
+--PAGE
+--
+-- TASK_5
+--
+
+ procedure TASK_5 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+
+ TEXT_IO.PUT_LINE( "TA5 - got SM1" );
+
+ TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
+ RTEMS.SEMAPHORE_OBTAIN(
+ SPTEST.SEMAPHORE_ID( 1 ),
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.OBJECT_WAS_DELETED,
+ "SEMAPHORE_OBTAIN ON SM1"
+ );
+ TEXT_IO.PUT_LINE( "TA5 - SM1 deleted by TA1" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 12 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_5;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp12/sptest.ads b/c/src/ada-tests/sptests/sp12/sptest.ads
new file mode 100644
index 0000000000..e4529ce278
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp12/sptest.ads
@@ -0,0 +1,197 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 12 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:51 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.NAME;
+
+ PRIORITY_TASK_ID : array ( 1 .. 5 ) of RTEMS.ID;
+ PRIORITY_TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME;
+ TASK_PRIORITY : array ( 1 .. 5 ) of RTEMS.TASK_PRIORITY;
+
+ SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PRIORITY_TEST_DRIVER
+--
+-- DESCRIPTION:
+--
+-- This subprogram creates and starts RTEMS tasks of different priority
+-- so that those tasks may exercise the priority blocking algorithm.
+--
+
+ procedure PRIORITY_TEST_DRIVER (
+ PRIORITY_BASE : in RTEMS.UNSIGNED32
+ );
+
+--
+-- PRIORITY_TASK
+--
+-- DESCRIPTION:
+--
+-- Copies of this RTEMS are executed at different priorities and each
+-- instantiation blocks on a semaphore with priority blocking. This
+-- is done to exercise the priority blocking algorithms.
+--
+
+ procedure PRIORITY_TASK (
+ ITS_INDEX : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Semaphore Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Semaphore Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Semaphore Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_4
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Semaphore Manager.
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_5
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Semaphore Manager.
+--
+
+ procedure TASK_5 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 10, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp13/sptest.adb b/c/src/ada-tests/sptests/sp13/sptest.adb
new file mode 100644
index 0000000000..75dfb69835
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp13/sptest.adb
@@ -0,0 +1,673 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 13 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:41:55 joel Exp
+--
+
+with BSP;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNCHECKED_CONVERSION;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 13 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'Q', '1', ' ', ' ' );
+ SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME( 'Q', '2', ' ', ' ' );
+ SPTEST.QUEUE_NAME( 3 ) := RTEMS.BUILD_NAME( 'Q', '3', ' ', ' ' );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 1 ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.QUEUE_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q1" );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 2 ),
+ 10,
+ RTEMS.PRIORITY + RTEMS.LIMIT,
+ SPTEST.QUEUE_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q2" );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ SPTEST.QUEUE_NAME( 3 ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.QUEUE_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- FILL_BUFFER
+--
+
+--
+-- Depends on tricks to make the copy work.
+--
+
+ procedure FILL_BUFFER (
+ SOURCE : in STRING;
+ BUFFER : out RTEMS.BUFFER
+ ) is
+ SOURCE_BUFFER : RTEMS.BUFFER_POINTER;
+ begin
+
+ SOURCE_BUFFER := RTEMS.TO_BUFFER_POINTER(
+ SOURCE( SOURCE'FIRST )'ADDRESS
+ );
+
+ BUFFER.FIELD1 := SOURCE_BUFFER.FIELD1;
+ BUFFER.FIELD2 := SOURCE_BUFFER.FIELD2;
+ BUFFER.FIELD3 := SOURCE_BUFFER.FIELD3;
+ BUFFER.FIELD4 := SOURCE_BUFFER.FIELD4;
+
+ end FILL_BUFFER;
+
+--PAGE
+--
+-- PUT_BUFFER
+--
+
+--
+-- Depends on tricks to make the output work.
+--
+
+ procedure PUT_BUFFER (
+ BUFFER : in RTEMS.BUFFER
+ ) is
+ begin
+
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
+ TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
+
+ end PUT_BUFFER;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ QID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ TIMES : RTEMS.UNSIGNED32;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ SPTEST.QUEUE_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ QID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_IDENT" );
+ TEXT_IO.PUT( "TA1 - message_queue_ident - qid => " );
+ UNSIGNED32_IO.PUT( QID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 1 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 1" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 1 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 1" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 1" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+ SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 2 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 2" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT(
+ "TA1 - message_queue_receive - receive from queue 1 - "
+ );
+ TEXT_IO.PUT_LINE( "10 second timeout" );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA1 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+ RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+ SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 4 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 4 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 5 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 5 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+ for TIMES in 1 .. 4
+ loop
+ TEXT_IO.PUT(
+ "TA1 - message_queue_receive - receive from queue 3 - "
+ );
+ TEXT_IO.PUT_LINE( "WAIT FOREVER" );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA1 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+ end loop;
+
+ SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+ TEXT_IO.PUT(
+ "TA1 - message_queue_receive - receive from queue 2 - "
+ );
+ TEXT_IO.PUT_LINE( "WAIT FOREVER" );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA1 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
+ RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 2" );
+ RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
+
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - empty Q 3" );
+ RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+ TEXT_IO.PUT( "TA1 - " );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+ TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
+ RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+ TEXT_IO.PUT( "TA1 - " );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+ TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - until all message buffers consumed"
+ );
+ loop
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED );
+
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ end loop;
+ TEXT_IO.PUT_LINE(
+ "TA1 - message_queue_send - all message buffers consumed"
+ );
+ TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
+ RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+ TEXT_IO.PUT( "TA1 - " );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+ TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
+
+ if COUNT /= BSP.CONFIGURATION.MAXIMUM_MESSAGES then
+ TEXT_IO.PUT( "TA1 - ERROR - " );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+ TEXT_IO.PUT_LINE( " messages flushed" );
+ end if;
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - message_queue_receive - receive from queue 1 - NO_WAIT"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA2 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA2 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA2 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - task_set_priority - make self highest priority task"
+ );
+ RTEMS.TASK_SET_PRIORITY(
+ RTEMS.SELF,
+ 3,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA2 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 2 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA2 - message_queue_send - BUFFER 2 TO Q 2" );
+ RTEMS.MESSAGE_QUEUE_SEND(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - message_queue_receive - receive from queue 1 - 10 second timeout"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA2 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA2 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TEXT_IO.PUT_LINE(
+ "TA3 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 2 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA3 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
+ TEXT_IO.PUT_LINE( "TA3 - message_queue_broadcast - BUFFER 3 TO Q 1" );
+ RTEMS.MESSAGE_QUEUE_BROADCAST(
+ SPTEST.QUEUE_ID( 1 ),
+ BUFFER_POINTER,
+ COUNT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
+ TEXT_IO.PUT( "TA3 - number of tasks awakened = " );
+ UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE(
+ "TA3 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
+ );
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ SPTEST.QUEUE_ID( 3 ),
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+ TEXT_IO.PUT( "TA3 - buffer received: " );
+ SPTEST.PUT_BUFFER( BUFFER );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end TASK_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp13/sptest.ads b/c/src/ada-tests/sptests/sp13/sptest.ads
new file mode 100644
index 0000000000..12a2e83039
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp13/sptest.ads
@@ -0,0 +1,174 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 13 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:41:57 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS message
+-- queues created by this test.
+--
+
+ QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- FILL_BUFFER
+--
+-- DESCRIPTION:
+--
+-- This subprogram takes the SOURCE input string and places
+-- up to the first sixteen characters of that string into
+-- the message BUFFER.
+--
+
+ procedure FILL_BUFFER (
+ SOURCE : in STRING;
+ BUFFER : out RTEMS.BUFFER
+ );
+
+--
+-- PUT_BUFFER
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the specified message BUFFER.
+--
+
+ procedure PUT_BUFFER (
+ BUFFER : in RTEMS.BUFFER
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Message Queue Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Message Queue Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Message Queue Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 10, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp14/sptest.adb b/c/src/ada-tests/sptests/sp14/sptest.adb
new file mode 100644
index 0000000000..5474f86677
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp14/sptest.adb
@@ -0,0 +1,329 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 14 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:00 joel Exp
+--
+
+with ADDRESS_IO;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+with INTERFACES; use INTERFACES;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 14 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 1 ),
+ SPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- SIGNAL_3_TO_TASK_1
+--
+
+ procedure SIGNAL_3_TO_TASK_1 (
+ ID : in RTEMS.ID;
+ POINTER : in RTEMS.ADDRESS
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_3, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND of 3" );
+
+ SPTEST.TIMER_GOT_THIS_ID := ID;
+ SPTEST.TIMER_GOT_THIS_POINTER := POINTER;
+
+ SPTEST.SIGNAL_SENT := TRUE;
+
+ end SIGNAL_3_TO_TASK_1;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PREVIOUS_MODE : RTEMS.MODE;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_catch - INTERRUPT_LEVEL( 3 )" );
+ RTEMS.SIGNAL_CATCH(
+ SPTEST.PROCESS_ASR'ACCESS,
+ RTEMS.INTERRUPT_LEVEL( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH INTERRUPT(3)" );
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_16 to self" );
+ RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SIGNAL_SEND - SIGNAL_16 to SELF"
+ );
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_0 to self" );
+ RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SIGNAL_SEND - SIGNAL_0 to SELF"
+ );
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_catch - NO_ASR" );
+ RTEMS.SIGNAL_CATCH(SPTEST.PROCESS_ASR'ACCESS, RTEMS.NO_ASR, STATUS);
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH - NO_ASR" );
+
+ TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_1 to self" );
+ RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SIGNAL_SEND - SIGNAL_1 to SELF"
+ );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_mode - disable ASRs" );
+ RTEMS.TASK_MODE(
+ RTEMS.NO_ASR,
+ RTEMS.ASR_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ SPTEST.TIMER_GOT_THIS_ID := 0;
+ SPTEST.TIMER_GOT_THIS_POINTER := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT_LINE( "TA1 - sending signal to SELF from timer" );
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( 1 ),
+ TEST_SUPPORT.TICKS_PER_SECOND / 2,
+ SPTEST.SIGNAL_3_TO_TASK_1'ACCESS,
+ SPTEST.TASK_1'ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - waiting for signal to arrive" );
+
+ SPTEST.SIGNAL_SENT := FALSE;
+ SPTEST.ASR_FIRED := FALSE;
+
+ loop
+ exit when SPTEST.SIGNAL_SENT = TRUE;
+ end loop;
+
+ if SPTEST.TIMER_GOT_THIS_ID = SPTEST.TIMER_ID( 1 ) and then
+ SPTEST.TIMER_GOT_THIS_POINTER = SPTEST.TASK_1'ADDRESS then
+
+ TEXT_IO.PUT_LINE( "TA1 - timer routine got the correct arguments" );
+
+ else
+
+ TEXT_IO.PUT( "TA1 - timer got (" );
+ UNSIGNED32_IO.PUT( SPTEST.TIMER_GOT_THIS_ID );
+ TEXT_IO.PUT( "," );
+ ADDRESS_IO.PUT( SPTEST.TIMER_GOT_THIS_POINTER );
+ TEXT_IO.PUT( ") instead of (" );
+ UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ) );
+ TEXT_IO.PUT( "," );
+ ADDRESS_IO.PUT( SPTEST.TASK_1'ADDRESS );
+ TEXT_IO.PUT_LINE( ")!!!!" );
+
+ end if;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_mode - enable ASRs" );
+ RTEMS.TASK_MODE(
+ RTEMS.ASR,
+ RTEMS.ASR_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_catch - ASR ADDRESS of NULL" );
+ RTEMS.SIGNAL_CATCH( NULL, RTEMS.DEFAULT_MODES, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SIGNAL_CATCH - NULL ADDRESS"
+ );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA2 - signal_send - SIGNAL_17 to TA1" );
+ RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_17, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SIGNAL_SEND - SIGNAL_17 to TA1"
+ );
+
+ TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
+
+ TEXT_IO.PUT_LINE(
+ "TA2 - signal_send - SIGNAL_18 and SIGNAL_19 to TA1"
+ );
+ RTEMS.SIGNAL_SEND(
+ SPTEST.TASK_ID( 1 ),
+ RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "SIGNAL_SEND - SIGNAL_18 and SIGNAL_19 to TA1"
+ );
+
+ TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 14 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_2;
+
+--PAGE
+--
+-- PROCESS_ASR
+--
+
+ procedure PROCESS_ASR (
+ THE_SIGNAL_SET : in RTEMS.SIGNAL_SET
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "ASR - ENTRY - signal => " );
+ UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ if THE_SIGNAL_SET = RTEMS.SIGNAL_16 or else
+ THE_SIGNAL_SET = RTEMS.SIGNAL_17 or else
+ THE_SIGNAL_SET = RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19 then
+ NULL;
+
+ elsif THE_SIGNAL_SET = RTEMS.SIGNAL_0 or else
+ THE_SIGNAL_SET = RTEMS.SIGNAL_1 then
+ TEXT_IO.PUT_LINE( "ASR - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "TASK_WAKE_AFTER YIELD"
+ );
+
+ elsif THE_SIGNAL_SET = RTEMS.SIGNAL_3 then
+
+ SPTEST.ASR_FIRED := TRUE;
+
+ end if;
+
+ TEXT_IO.PUT( "ASR - EXIT - signal => " );
+ UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
+ TEXT_IO.NEW_LINE;
+
+ end PROCESS_ASR;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp14/sptest.ads b/c/src/ada-tests/sptests/sp14/sptest.ads
new file mode 100644
index 0000000000..6e171a6382
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp14/sptest.ads
@@ -0,0 +1,186 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 14 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:02 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- SIGNAL_SENT is set to TRUE to indicate that a signal set has
+-- been sent from an ISR to the executing task.
+--
+
+ SIGNAL_SENT : RTEMS.BOOLEAN;
+ pragma volatile( SIGNAL_SENT );
+
+--
+-- These hold the arguments passed to the timer service routine.
+--
+
+ TIMER_GOT_THIS_ID : RTEMS.ID;
+ pragma volatile( TIMER_GOT_THIS_ID );
+
+ TIMER_GOT_THIS_POINTER : RTEMS.ADDRESS;
+ pragma volatile( TIMER_GOT_THIS_POINTER );
+
+--
+-- ASR_FIRED is set to TRUE to indicate that the ASR has executed
+-- and was passed the correct signal set.
+--
+
+ ASR_FIRED : RTEMS.BOOLEAN;
+ pragma volatile( ASR_FIRED );
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- SIGNAL_3_TO_TASK_1
+--
+-- DESCRIPTION:
+--
+-- This subprogram sends signal 3 to TASK_1.
+--
+
+ procedure SIGNAL_3_TO_TASK_1 (
+ ID : in RTEMS.ID;
+ POINTER : in RTEMS.ADDRESS
+ );
+
+--
+-- PROCESS_ASR
+--
+-- DESCRIPTION:
+--
+-- This subprogram is an ASR for TASK_1.
+--
+
+ procedure PROCESS_ASR (
+ THE_SIGNAL_SET : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Signal Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Signal Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp15/sptest.adb b/c/src/ada-tests/sptests/sp15/sptest.adb
new file mode 100644
index 0000000000..1254350e90
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp15/sptest.adb
@@ -0,0 +1,284 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 15 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:05 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 15 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
+ SPTEST.PARTITION_NAME( 2 ) := RTEMS.BUILD_NAME( 'P', 'T', '2', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 4,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ TEXT_IO.PUT_LINE( "INIT - partition_create - partition 1" );
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 1 ),
+ AREA_1'ADDRESS,
+ 4096,
+ 512,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.PARTITION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE OF PT1" );
+
+ TEXT_IO.PUT_LINE( "INIT - partition_create - partition 2" );
+ RTEMS.PARTITION_CREATE(
+ SPTEST.PARTITION_NAME( 2 ),
+ AREA_2'ADDRESS,
+ 274,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.PARTITION_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE OF PT2" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PUT_ADDRESS_FROM_AREA_1
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_1 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ ) is
+
+ begin
+
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+
+ end PUT_ADDRESS_FROM_AREA_1;
+
+--PAGE
+--
+-- PUT_ADDRESS_FROM_AREA_2
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_2 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_2'ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+
+ end PUT_ADDRESS_FROM_AREA_2;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PTID_1 : RTEMS.ID;
+ PTID_2 : RTEMS.ID;
+ BUFFER_ADDRESS_1 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_2 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_3 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_4 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "TA1 - partition_ident - partition 1 id = " );
+ RTEMS.PARTITION_IDENT(
+ SPTEST.PARTITION_NAME( 1 ),
+ RTEMS.SEARCH_ALL_NODES,
+ PTID_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_IDENT OF PT1" );
+ UNSIGNED32_IO.PUT( PTID_1, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - partition_ident - partition 2 id = " );
+ RTEMS.PARTITION_IDENT(
+ SPTEST.PARTITION_NAME( 2 ),
+ RTEMS.SEARCH_ALL_NODES,
+ PTID_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_IDENT OF PT2" );
+ UNSIGNED32_IO.PUT( PTID_2, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA1 - partition_get_buffer - get buffer 1 from partition 1 - "
+ );
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA1 - partition_get_buffer - get buffer 2 from partition 1 - "
+ );
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA1 - partition_get_buffer - get buffer 1 from partition 2 - "
+ );
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 2 ),
+ BUFFER_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_3 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA1 - partition_get_buffer - get buffer 2 from partition 2 - "
+ );
+ RTEMS.PARTITION_GET_BUFFER(
+ SPTEST.PARTITION_ID( 2 ),
+ BUFFER_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_4 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA1 - partition_return_buffer - return buffer 1 to partition 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.PARTITION_RETURN_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+
+ TEXT_IO.PUT(
+ "TA1 - partition_return_buffer - return buffer 2 to partition 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.PARTITION_RETURN_BUFFER(
+ SPTEST.PARTITION_ID( 1 ),
+ BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+
+ TEXT_IO.PUT(
+ "TA1 - partition_return_buffer - return buffer 1 to partition 2 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_3 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.PARTITION_RETURN_BUFFER(
+ SPTEST.PARTITION_ID( 2 ),
+ BUFFER_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+
+ TEXT_IO.PUT(
+ "TA1 - partition_return_buffer - return buffer 2 to partition 2 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_4 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.PARTITION_RETURN_BUFFER(
+ SPTEST.PARTITION_ID( 2 ),
+ BUFFER_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - partition_delete - delete partition 1" );
+ RTEMS.PARTITION_DELETE( SPTEST.PARTITION_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE OF SELF" );
+
+ TEXT_IO.PUT_LINE( "TA1 - partition_delete - delete partition 2" );
+ RTEMS.PARTITION_DELETE( SPTEST.PARTITION_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE OF SELF" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 15 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp15/sptest.ads b/c/src/ada-tests/sptests/sp15/sptest.ads
new file mode 100644
index 0000000000..0d17f4b17e
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp15/sptest.ads
@@ -0,0 +1,173 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 15 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:06 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS partitions created
+-- by this test.
+--
+
+ PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays define the memory areas used for the partitions in
+-- this test.
+--
+
+ AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+ for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+ AREA_2 : array ( RTEMS.UNSIGNED32 range 0 .. 273 ) of RTEMS.UNSIGNED8;
+ for AREA_2'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PUT_ADDRESS_FROM_AREA_1
+--
+-- DESCRIPTION:
+--
+-- This subpgram prints the offset of the address TO_BE_PRINTED
+-- from the first byte of AREA_1.
+--
+-- NOTE:
+--
+-- This subprogram is used because the actual address of AREA_1
+-- varies based upon the size of the executable, the target board,
+-- and the target processor.
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_1 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ );
+
+--
+-- PUT_ADDRESS_FROM_AREA_2
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the offset of the address TO_BE_PRINTED
+-- from the first byte of AREA_2.
+--
+-- NOTE:
+--
+-- This subprogram is used because the actual address of AREA_1
+-- varies based upon the size of the executable, the target board,
+-- and the target processor.
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_2 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Partition Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 2, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp16/sptest.adb b/c/src/ada-tests/sptests/sp16/sptest.adb
new file mode 100644
index 0000000000..4b599f433d
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp16/sptest.adb
@@ -0,0 +1,686 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 16 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:10 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 16 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+ SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
+ SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ SPTEST.BASE_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ SPTEST.BASE_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 3 ),
+ SPTEST.BASE_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 3 ),
+ SPTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+ SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
+ SPTEST.REGION_NAME( 2 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
+ SPTEST.REGION_NAME( 3 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 1 ),
+ SPTEST.AREA_1'ADDRESS,
+ 4096,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.REGION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN1" );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 2 ),
+ SPTEST.AREA_2'ADDRESS,
+ 4096,
+ 128,
+ RTEMS.PRIORITY,
+ SPTEST.REGION_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN2" );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 3 ),
+ SPTEST.AREA_3'ADDRESS,
+ 4096,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.REGION_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN3" );
+
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PUT_ADDRESS_FROM_AREA_1
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_1 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ ) is
+
+ begin
+
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+
+ end PUT_ADDRESS_FROM_AREA_1;
+
+--PAGE
+--
+-- PUT_ADDRESS_FROM_AREA_2
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_2 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_2'ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+
+ end PUT_ADDRESS_FROM_AREA_2;
+
+--PAGE
+--
+-- PUT_ADDRESS_FROM_AREA_3
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_3 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_3'ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+
+ end PUT_ADDRESS_FROM_AREA_3;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ RNID : RTEMS.ID;
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_4 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.REGION_IDENT( SPTEST.REGION_NAME( 1 ), RNID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_IDENT OF RN1" );
+ TEXT_IO.PUT( "TA1 - region_ident - rnid => " );
+ UNSIGNED32_IO.PUT( RNID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "100 byte segment from region 2" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 2 ),
+ 100,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 2 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "3K segment from region 3" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 3 ),
+ 3072,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 3 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_3( SEGMENT_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - get 3080 byte segment " );
+ TEXT_IO.PUT_LINE( "from region 1 - NO_WAIT" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 3080,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait 10 seconds for 3K " );
+ TEXT_IO.PUT_LINE( "segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 3072,
+ RTEMS.DEFAULT_OPTIONS,
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SEGMENT_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 2 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 2 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+TEST_SUPPORT.PAUSE;
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 4 ),
+ SPTEST.BASE_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 4 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 5 ),
+ SPTEST.BASE_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 5 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 4 ),
+ SPTEST.TASK_4'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 5 ),
+ SPTEST.TASK_5'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait 10 seconds for 3K " );
+ TEXT_IO.PUT_LINE( "segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 3072,
+ RTEMS.DEFAULT_OPTIONS,
+ 10 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SEGMENT_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
+ RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - region_delete - delete region 1" );
+ RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 16 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "TA2 - region_get_segment - wait on 2K segment " );
+ TEXT_IO.PUT_LINE( "from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 2048,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA2 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA2 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA2 - task_set_priority - make self " );
+ TEXT_IO.PUT_LINE( "highest priority task" );
+ RTEMS.TASK_SET_PRIORITY(
+ RTEMS.SELF,
+ SPTEST.BASE_PRIORITY - 1,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ TEXT_IO.PUT(
+ "TA2 - region_get_segment - wait on 3968 byte segment "
+ );
+ TEXT_IO.PUT_LINE( "from region 2" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 2 ),
+ 3968,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA2 - got segment from region 2 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT(
+ "TA2 - region_return_segment - return segment to region 2 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_2 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 2 ),
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "TA3 - region_get_segment - wait on 3968 byte segment " );
+ TEXT_IO.PUT_LINE( "from region 2" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 2 ),
+ 3968,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA3 - got segment from region 2 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA3 - region_get_segment - wait on 2K segment " );
+ TEXT_IO.PUT_LINE( "from region 3" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 3 ),
+ 2048,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+ end TASK_3;
+
+--PAGE
+--
+-- TASK_4
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "TA4 - region_get_segment - wait on 1.5K segment " );
+ TEXT_IO.PUT_LINE( "from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 1536,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.PUT( "TA4 - got and returned " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT( "TA4 - region_get_segment - wait on 3K segment " );
+ TEXT_IO.PUT_LINE( "from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 3072,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+ end TASK_4;
+
+--PAGE
+--
+-- TASK_5
+--
+
+ procedure TASK_5 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT( "TA5 - region_get_segment - wait on 1.5K segment " );
+ TEXT_IO.PUT_LINE( "from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 1536,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.PUT( "TA5 - got and returned " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TEXT_IO.PUT( "TA5 - region_get_segment - wait on 3K segment " );
+ TEXT_IO.PUT_LINE( "from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 3072,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA5 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.PUT(
+ "TA5 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA5 - task_delete - delete self" );
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA5" );
+
+ end TASK_5;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp16/sptest.ads b/c/src/ada-tests/sptests/sp16/sptest.ads
new file mode 100644
index 0000000000..d65ac4e09f
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp16/sptest.ads
@@ -0,0 +1,250 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 16 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:11 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS regions created
+-- by this test.
+--
+
+ REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following constant defines the priority of most of the
+-- RTEMS tasks in this test. This allows one of the tasks to
+-- easily set itself to a higher priority than the rest.
+--
+
+ BASE_PRIORITY : constant RTEMS.TASK_PRIORITY := 140;
+
+--
+-- These arrays define the memory areas used for the regions in
+-- this test.
+--
+
+ AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+ for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+ AREA_2 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+ for AREA_2'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+ AREA_3 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+ for AREA_3'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PUT_ADDRESS_FROM_AREA_1
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the offset of the address TO_BE_PRINTED
+-- from the first byte of AREA_1.
+--
+-- NOTE:
+--
+-- This subprogram is used because the actual address of AREA_1
+-- varies based upon the size of the executable, the target board,
+-- and the target processor.
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_1 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ );
+
+--
+-- PUT_ADDRESS_FROM_AREA_2
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the offset of the address TO_BE_PRINTED
+-- from the first byte of AREA_2.
+--
+-- NOTE:
+--
+-- This subprogram is used because the actual address of AREA_2
+-- varies based upon the size of the executable, the target board,
+-- and the target processor.
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_2 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ );
+
+--
+-- PUT_ADDRESS_FROM_AREA_3
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the offset of the address TO_BE_PRINTED
+-- from the first byte of AREA_3.
+--
+-- NOTE:
+--
+-- This subprogram is used because the actual address of AREA_3
+-- varies based upon the size of the executable, the target board,
+-- and the target processor.
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_3 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Region Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Region Manager.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Region Manager.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_4
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Region Manager.
+--
+
+ procedure TASK_4 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_5
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Region Manager.
+--
+
+ procedure TASK_5 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 3, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp17/sptest.adb b/c/src/ada-tests/sptests/sp17/sptest.adb
new file mode 100644
index 0000000000..d1657307b6
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp17/sptest.adb
@@ -0,0 +1,173 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 17 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:14 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 17 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+
+ SPTEST.TASK_2_PREEMPTED := FALSE;
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 2,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 2 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 2 ),
+ SPTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PROCESS_ASR
+--
+
+ procedure PROCESS_ASR (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_RESUME( SPTEST.TASK_ID( 2 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "ASR - TASK_RESUME OF TA2" );
+
+ end PROCESS_ASR;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "TA1 - signal_catch: initializing signal catcher" );
+ RTEMS.SIGNAL_CATCH(
+ SPTEST.PROCESS_ASR'ACCESS,
+ RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
+
+ TEXT_IO.PUT_LINE( "TA1 - Sending signal to self" );
+ RTEMS.SIGNAL_SEND(
+ SPTEST.TASK_ID( 1 ),
+ RTEMS.SIGNAL_16,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
+
+ if SPTEST.TASK_2_PREEMPTED = TRUE then
+ TEXT_IO.PUT_LINE( "TA1 - TA2 correctly preempted me" );
+ end if;
+
+ TEXT_IO.PUT_LINE( "TA1 - Got Back!!!" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 17 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ SPTEST.TASK_2_PREEMPTED := FALSE;
+
+ TEXT_IO.PUT_LINE( "TA2 - Suspending self" );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ TEXT_IO.PUT_LINE( "TA2 - signal_return preempted correctly" );
+
+ SPTEST.TASK_2_PREEMPTED := TRUE;
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+ end TASK_2;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp17/sptest.ads b/c/src/ada-tests/sptests/sp17/sptest.ads
new file mode 100644
index 0000000000..2f5a78a90c
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp17/sptest.ads
@@ -0,0 +1,148 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 17 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:15 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following is set to TRUE by TASK_2 when it preempts TASK_1.
+--
+
+ TASK_2_PREEMPTED : RTEMS.BOOLEAN;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PROCESS_ASR
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the ASR for TASK_1.
+--
+
+ procedure PROCESS_ASR (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests that when the transfer from the task
+-- to the ASR (and vice-versa) is performed, that the new mode
+-- is taken into account. If this occurs, then TASK_2 will be
+-- able to preempt upon completion of the ASR of TASK_1.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is designed to preempt TASK_1.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(25), -- # us in a tick
+ 1000 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp19/sptest.ads b/c/src/ada-tests/sptests/sp19/sptest.ads
new file mode 100644
index 0000000000..14473462ac
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp19/sptest.ads
@@ -0,0 +1,157 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 19 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:21 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
+
+--
+-- This array contains the floating point factors used by the
+-- floating point tasks in this test.
+--
+
+ FP_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of FLOAT;
+
+--
+-- This array contains the integer factors used by the
+-- integer tasks in this test.
+--
+
+ INTEGER_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of
+ RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- FIRST_FP_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the restart and deletion of floating point tasks.
+--
+
+ procedure FIRST_FP_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- FP_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the basic capabilities of a floating point
+-- task.
+--
+
+ procedure FP_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task provides a non-floating point task to test
+-- that an application can utilize a mixture of floating point
+-- and non-floating point tasks.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp20/sptest.adb b/c/src/ada-tests/sptests/sp20/sptest.adb
new file mode 100644
index 0000000000..0e754d8944
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp20/sptest.adb
@@ -0,0 +1,282 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 20 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:24 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+ SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
+ SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
+
+ for INDEX in 1 .. 5
+ loop
+
+ SPTEST.COUNT( INDEX ) := 0;
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( INDEX ),
+ SPTEST.PRIORITIES( INDEX ),
+ 4096,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ end loop;
+
+ for INDEX in 1 .. 5
+ loop
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( INDEX ),
+ SPTEST.TASK_1_THROUGH_5'ACCESS,
+ RTEMS.TASK_ARGUMENT( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1_THROUGH_5
+--
+
+ procedure TASK_1_THROUGH_5 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ RMID : RTEMS.ID;
+ TEST_RMID : RTEMS.ID;
+ INDEX : RTEMS.UNSIGNED32;
+ PASS : RTEMS.UNSIGNED32;
+ FAILED : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
+ TEXT_IO.PUT( "- rate_monotonic_create id = " );
+ UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.RATE_MONOTONIC_IDENT( ARGUMENT, TEST_RMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_IDENT" );
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
+ TEXT_IO.PUT( "- rate_monotonic_ident id = " );
+ UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+ if TEST_RMID /= RMID then
+ TEXT_IO.PUT_LINE( "RMID's DO NOT MATCH!!!" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
+ TEXT_IO.PUT( " - (" );
+ UNSIGNED32_IO.PUT( RMID, WIDTH => 1, BASE => 16 );
+ TEXT_IO.PUT( ") period " );
+ UNSIGNED32_IO.PUT(
+ SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
+ WIDTH => 1,
+ BASE => 10
+ );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_WAKE_AFTER( 2, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ case ARGUMENT is
+ when 1 .. 4 =>
+ loop
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ RMID,
+ SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
+ STATUS
+ );
+
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD"
+ );
+
+ SPTEST.COUNT( INTEGER( ARGUMENT ) ) :=
+ SPTEST.COUNT( INTEGER( ARGUMENT ) ) + 1;
+
+ end loop;
+
+ when 5 =>
+
+ PASS := 0;
+ FAILED := 0;
+
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ RMID,
+ SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
+ STATUS
+ );
+
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD 1 OF TA5"
+ );
+
+ SPTEST.GET_ALL_COUNTERS;
+
+ loop
+
+ RTEMS.RATE_MONOTONIC_PERIOD(
+ RMID,
+ SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
+ STATUS
+ );
+
+ TEST_SUPPORT.DIRECTIVE_FAILED(
+ STATUS,
+ "RATE_MONOTONIC_PERIOD 2 OF TA5"
+ );
+
+ SPTEST.GET_ALL_COUNTERS;
+
+ for INDEX in 1 .. 4
+ loop
+
+ if SPTEST.TEMPORARY_COUNT( INDEX ) /=
+ SPTEST.ITERATIONS( INDEX ) then
+
+ TEXT_IO.PUT( "FAIL -- " );
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME( INDEX ),
+ FALSE
+ );
+ TEXT_IO.PUT( "ACTUAL=" );
+ UNSIGNED32_IO.PUT(
+ SPTEST.TEMPORARY_COUNT( INDEX ),
+ WIDTH => 3,
+ BASE => 10
+ );
+ TEXT_IO.PUT( " EXPECTED=" );
+ UNSIGNED32_IO.PUT(
+ SPTEST.ITERATIONS( INDEX ),
+ WIDTH => 3,
+ BASE => 10
+ );
+ TEXT_IO.NEW_LINE;
+
+ FAILED := FAILED + 1;
+
+ end if;
+
+ end loop;
+
+ if FAILED = 5 then
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ PASS := PASS + 1;
+ TEXT_IO.PUT( "TA5 - PERIODS CHECK OK (" );
+ UNSIGNED32_IO.PUT( PASS, WIDTH => 1, BASE => 10 );
+ TEXT_IO.PUT_LINE( ")" );
+
+ if PASS = 10 then
+ TEXT_IO.PUT_LINE( "*** END OF TEST 20 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ end loop;
+
+ when others =>
+ NULL;
+
+ end case;
+
+ end TASK_1_THROUGH_5;
+
+--PAGE
+--
+-- GET_ALL_COUNTERS
+--
+
+ procedure GET_ALL_COUNTERS
+ is
+ PREVIOUS_MODE : RTEMS.MODE;
+ STATUS : RTEMS.STATUS_CODES;
+ INDEX : RTEMS.UNSIGNED32;
+ begin
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
+
+ SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
+
+ for INDEX in 1 .. 5
+ loop
+
+ SPTEST.COUNT( INDEX ) := 0;
+
+ end loop;
+
+ RTEMS.TASK_MODE(
+ RTEMS.PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
+
+ end GET_ALL_COUNTERS;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp20/sptest.ads b/c/src/ada-tests/sptests/sp20/sptest.ads
new file mode 100644
index 0000000000..df69c1a2b1
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp20/sptest.ads
@@ -0,0 +1,160 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 20 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:25 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( 1 .. 5 ) of RTEMS.ID;
+ TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the parameters which define the execution
+-- characteristics and periods of each instantiation of the
+-- copies of the RTEMS task TASKS_1_THROUGH_5.
+--
+
+ PERIODS : constant array ( 1 .. 5 )
+ of RTEMS.UNSIGNED32 := ( 2, 2, 2, 2, 100 );
+
+ ITERATIONS : constant array ( 1 .. 5 )
+ of RTEMS.UNSIGNED32 := ( 50, 50, 50, 50, 1 );
+
+ PRIORITIES : constant array ( 1 .. 5 )
+ of RTEMS.UNSIGNED32 := ( 1, 1, 3, 4, 5 );
+
+--
+-- The following type defines the array used to manage the
+-- execution counts of each task's period.
+--
+
+ type COUNT_ARRAY is array ( 1 .. 5 ) of RTEMS.UNSIGNED32;
+
+--
+-- These arrays contains the number of periods successfully completed
+-- by each of the tasks. At each of its periods, the fifth task
+-- will copy the contents of the COUNT array to TEMPORARY_COUNT,
+-- and clear the COUNT array. The copy is performed to insure
+-- that no periods fire while it is verifying the correctness
+-- of the test's execution.
+--
+
+ COUNT : SPTEST.COUNT_ARRAY;
+ TEMPORARY_COUNT : SPTEST.COUNT_ARRAY;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1_THROUGH_5
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks test the Rate Monotonic Manager.
+--
+
+ procedure TASK_1_THROUGH_5 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- GET_ALL_COUNTERS
+--
+-- DESCRIPTION:
+--
+-- This subprogram atomically copies the contents of COUNTER to
+-- TEMPORARY_COUNTER.
+--
+
+ procedure GET_ALL_COUNTERS;
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 10, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 10, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp21/sptest.adb b/c/src/ada-tests/sptests/sp21/sptest.adb
new file mode 100644
index 0000000000..f2b9877acc
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp21/sptest.adb
@@ -0,0 +1,270 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 21 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:28 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 21 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ RETURN_VALUE : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "----- TESTING THE NULL DRIVER CHECKS -----" );
+
+ RTEMS.IO_INITIALIZE(
+ SPTEST.NO_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_INITIALIZE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_initialize - NULL DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_OPEN(
+ SPTEST.NO_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_OPEN" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_open - NULL DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_CLOSE(
+ SPTEST.NO_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CLOSE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_close - NULL DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_READ(
+ SPTEST.NO_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_READ" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_read - NULL DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_WRITE(
+ SPTEST.NO_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_WRITE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_write - NULL DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_CONTROL(
+ SPTEST.NO_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CONTROL" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_control - NULL DRIVER SUCCESSFUL"
+ );
+
+ TEXT_IO.PUT_LINE( "----- TESTING THE I/O MANAGER DIRECTIVES -----" );
+
+ RTEMS.IO_INITIALIZE(
+ SPTEST.STUB_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_INITIALIZE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_initialize - STUB DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_OPEN(
+ SPTEST.STUB_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_OPEN" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_open - STUB DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_CLOSE(
+ SPTEST.STUB_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CLOSE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_close - STUB DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_READ(
+ SPTEST.STUB_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_READ" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_read - STUB DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_WRITE(
+ SPTEST.STUB_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_WRITE" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_write - STUB DRIVER SUCCESSFUL"
+ );
+
+ RTEMS.IO_CONTROL(
+ SPTEST.STUB_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CONTROL" );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_control - STUB DRIVER SUCCESSFUL"
+ );
+
+ TEXT_IO.PUT_LINE( "----- RETURNING INVALID MAJOR NUMBER -----" );
+
+ RTEMS.IO_INITIALIZE(
+ SPTEST.INVALID_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_INITIALIZE"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_initialize - INVALID_NUMBER"
+ );
+
+ RTEMS.IO_OPEN(
+ SPTEST.INVALID_DRIVER_MAJOR,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+ STATUS,
+ RTEMS.INVALID_NUMBER,
+ "IO_OPEN"
+ );
+ TEXT_IO.PUT_LINE(
+ "TA1 - io_open - INVALID_NUMBER"
+ );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 21 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp21/sptest.ads b/c/src/ada-tests/sptests/sp21/sptest.ads
new file mode 100644
index 0000000000..b0a54a2268
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp21/sptest.ads
@@ -0,0 +1,141 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 21 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:29 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+with STUB_DRIVER;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following constants define the device major numbers
+-- utilized by this test.
+--
+
+ NO_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 3;
+ INVALID_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 5;
+ STUB_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 2;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Input Output Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 3 ) :=
+ (
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ ),
+ (
+ STUB_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ STUB_DRIVER.OPEN'ACCESS, -- Open
+ STUB_DRIVER.CLOSE'ACCESS, -- Close
+ STUB_DRIVER.READ'ACCESS, -- Read
+ STUB_DRIVER.WRITE'ACCESS, -- Write
+ STUB_DRIVER.CONTROL'ACCESS -- Control
+ ),
+ (
+ RTEMS.NO_DRIVER_ENTRY, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp22/sptest.adb b/c/src/ada-tests/sptests/sp22/sptest.adb
new file mode 100644
index 0000000000..54bb256991
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp22/sptest.adb
@@ -0,0 +1,299 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 22 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:34 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 22 ***" );
+
+ TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ TEXT_IO.PUT_LINE( "INIT - timer_create - creating timer 1" );
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( 1 ),
+ SPTEST.TIMER_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
+ TEXT_IO.PUT( "INIT - timer 1 has id (" );
+ UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT_LINE( ")" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- DELAYED_RESUME
+--
+
+ procedure DELAYED_RESUME (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_RESUME( SPTEST.TASK_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF SELF" );
+
+ end DELAYED_RESUME;
+
+--PAGE
+--
+-- PRINT_TIME
+--
+
+ procedure PRINT_TIME
+ is
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME( 1 ),
+ FALSE
+ );
+
+ TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ end PRINT_TIME;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TMID : RTEMS.ID;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+-- GET ID
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_ident - identing timer 1" );
+ RTEMS.TIMER_IDENT( SPTEST.TIMER_NAME( 1 ), TMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_IDENT OF TM1" );
+ TEXT_IO.PUT( "TA1 - timer 1 has id (" );
+ UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT_LINE( ")" );
+
+-- AFTER WHICH IS ALLOWED TO FIRE
+
+ SPTEST.PRINT_TIME;
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
+ RTEMS.TIMER_FIRE_AFTER(
+ TMID,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.DELAYED_RESUME'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ SPTEST.PRINT_TIME;
+
+-- AFTER WHICH IS RESET AND ALLOWED TO FIRE
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
+ RTEMS.TIMER_FIRE_AFTER(
+ TMID,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.DELAYED_RESUME'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ SPTEST.PRINT_TIME;
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_reset - timer 1" );
+ RTEMS.TIMER_RESET( TMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_RESET" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ SPTEST.PRINT_TIME;
+
+TEST_SUPPORT.PAUSE;
+
+--
+-- Reset the time since we do not know how long the user waited
+-- before pressing <cr> at the pause. This insures that the
+-- actual output matches the screen.
+--
+
+ TIME := ( 1988, 12, 31, 9, 0, 7, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+-- after which is canceled
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
+ RTEMS.TIMER_FIRE_AFTER(
+ TMID,
+ 3 * TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.DELAYED_RESUME'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" );
+ RTEMS.TIMER_CANCEL( TMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+-- when which is allowed to fire
+
+ SPTEST.PRINT_TIME;
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TIME.SECOND := TIME.SECOND + 3;
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" );
+ RTEMS.TIMER_FIRE_WHEN(
+ TMID,
+ TIME,
+ SPTEST.DELAYED_RESUME'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ SPTEST.PRINT_TIME;
+
+-- when which is canceled
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ TIME.SECOND := TIME.SECOND + 3;
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" );
+ RTEMS.TIMER_FIRE_WHEN(
+ TMID,
+ TIME,
+ SPTEST.DELAYED_RESUME'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" );
+
+ TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" );
+ RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ SPTEST.PRINT_TIME;
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" );
+ RTEMS.TIMER_CANCEL( TMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+-- delete
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - task_wake_after - YIELD (only task at priority)"
+ );
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
+
+ TEXT_IO.PUT_LINE( "TA1 - timer_delete - timer 1" );
+ RTEMS.TIMER_DELETE( TMID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_DELETE" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 22 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp22/sptest.ads b/c/src/ada-tests/sptests/sp22/sptest.ads
new file mode 100644
index 0000000000..51598c7092
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp22/sptest.ads
@@ -0,0 +1,147 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 22 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:35 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- DELAYED_RESUME
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled to be fired as a timer service
+-- routine. When fired this subprogram resumes TASK_1.
+--
+
+ procedure DELAYED_RESUME (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- PRINT_TIME
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the name of TASK_1 and the current TIME of day.
+--
+
+ procedure PRINT_TIME;
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Timer Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 1, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp23/sptest.adb b/c/src/ada-tests/sptests/sp23/sptest.adb
new file mode 100644
index 0000000000..a809de3eb3
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp23/sptest.adb
@@ -0,0 +1,179 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 23 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:38 joel Exp
+--
+
+with ADDRESS_IO;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INTERNAL_AREA : RTEMS.ADDRESS;
+ EXTERNAL_AREA : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 23 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ SPTEST.PORT_NAME( 1 ) := RTEMS.BUILD_NAME( 'D', 'P', '1', ' ' );
+
+ INTERNAL_AREA := SPTEST.INTERNAL_PORT_AREA( 0 )'ADDRESS;
+ EXTERNAL_AREA := SPTEST.EXTERNAL_PORT_AREA( 0 )'ADDRESS;
+ RTEMS.PORT_CREATE(
+ SPTEST.PORT_NAME( 1 ),
+ INTERNAL_AREA,
+ EXTERNAL_AREA,
+ SPTEST.INTERNAL_PORT_AREA'LENGTH,
+ SPTEST.PORT_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_CREATE OF DP1" );
+ TEXT_IO.PUT( "INIT - port_create - DP1 - internal = " );
+ ADDRESS_IO.PUT( INTERNAL_AREA, WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT( " external = " );
+ ADDRESS_IO.PUT( EXTERNAL_AREA, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ DPID : RTEMS.ID;
+ TO_BE_CONVERTED : RTEMS.ADDRESS;
+ CONVERTED : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.PORT_IDENT( SPTEST.PORT_NAME( 1 ), DPID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_IDENT" );
+ TEXT_IO.PUT( "TA1 - port_ident - " );
+ UNSIGNED32_IO.PUT( DPID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TO_BE_CONVERTED := SPTEST.EXTERNAL_PORT_AREA( 16#E# )'ADDRESS;
+ RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+ SPTEST.PORT_ID( 1 ),
+ TO_BE_CONVERTED,
+ CONVERTED,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_EXTERNAL_TO_INTERNAL" );
+ TEXT_IO.PUT( "TA1 - port_external_to_internal - external: " );
+ ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT( " => internal: " );
+ ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TO_BE_CONVERTED := SPTEST.INTERNAL_PORT_AREA( 16#E# )'ADDRESS;
+ RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+ SPTEST.PORT_ID( 1 ),
+ TO_BE_CONVERTED,
+ CONVERTED,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_INTERNAL_TO_EXTERNAL" );
+ TEXT_IO.PUT( "TA1 - port_internal_to_external - internal: " );
+ ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT( " => external: " );
+ ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TO_BE_CONVERTED := SPTEST.ABOVE_PORT_AREA( 16#E# )'ADDRESS;
+ RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+ SPTEST.PORT_ID( 1 ),
+ TO_BE_CONVERTED,
+ CONVERTED,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_EXTERNAL_TO_INTERNAL" );
+ TEXT_IO.PUT( "TA1 - port_external_to_internal - external: " );
+ ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT( " => internal: " );
+ ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TO_BE_CONVERTED := SPTEST.BELOW_PORT_AREA( 16#E# )'ADDRESS;
+ RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+ SPTEST.PORT_ID( 1 ),
+ TO_BE_CONVERTED,
+ CONVERTED,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_INTERNAL_TO_EXTERNAL" );
+ TEXT_IO.PUT( "TA1 - port_internal_to_external - internal: " );
+ ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.PUT( " => external: " );
+ ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "TA1 - port_delete - DP1" );
+ RTEMS.PORT_DELETE( SPTEST.PORT_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_DELETE" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 23 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp23/sptest.ads b/c/src/ada-tests/sptests/sp23/sptest.ads
new file mode 100644
index 0000000000..af8fc7a85f
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp23/sptest.ads
@@ -0,0 +1,173 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 23 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:39 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+with SYSTEM;
+with System.Storage_Elements;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS ports created
+-- by this test.
+--
+
+ PORT_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+ PORT_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+-- The following area defines a memory area to be used as the
+-- internal address space of the port.
+--
+
+ INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00001000#);
+
+ INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- external address space of the port.
+--
+
+ EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00002000#);
+
+ EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used for
+-- addresses which are below the address space of the port.
+--
+
+ BELOW_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00000500#);
+
+ BELOW_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for BELOW_PORT_AREA use at BELOW_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used for
+-- addresses which are above the address space of the port.
+--
+
+ ABOVE_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00003000#);
+
+ ABOVE_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for ABOVE_PORT_AREA use at ABOVE_PORT_AREA_ADDRESS;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Dual Ported Memory Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 2, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 1, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp24/sptest.adb b/c/src/ada-tests/sptests/sp24/sptest.adb
new file mode 100644
index 0000000000..7c3e309e3d
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp24/sptest.adb
@@ -0,0 +1,171 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 24 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:43 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TIME : RTEMS.TIME_OF_DAY;
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 24 ***" );
+
+ TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+ RTEMS.CLOCK_SET( TIME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+ SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
+ SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'M', '3', ' ' );
+
+ for INDEX in 1 .. 3
+ loop
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( INDEX ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TIMER_CREATE(
+ SPTEST.TIMER_NAME( INDEX ),
+ SPTEST.TIMER_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE LOOP" );
+
+ end loop;
+
+ for INDEX in 1 .. 3
+ loop
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( INDEX ),
+ SPTEST.TASK_1_THROUGH_3'ACCESS,
+ RTEMS.TASK_ARGUMENT( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- RESUME_TASK
+--
+
+ procedure RESUME_TASK (
+ TIMER_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ TASK_TO_RESUME : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TASK_TO_RESUME := SPTEST.TASK_ID(INTEGER( RTEMS.GET_INDEX( TIMER_ID ) ));
+ RTEMS.TASK_RESUME( TASK_TO_RESUME, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
+
+ end RESUME_TASK;
+
+--PAGE
+--
+-- TASK_1_THROUGH_3
+--
+
+ procedure TASK_1_THROUGH_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TID : RTEMS.ID;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+ loop
+
+ RTEMS.TIMER_FIRE_AFTER(
+ SPTEST.TIMER_ID( INTEGER( ARGUMENT ) ),
+ TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
+ TEST_SUPPORT.TICKS_PER_SECOND,
+ SPTEST.RESUME_TASK'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+ if TIME.SECOND >= 35 then
+ TEXT_IO.PUT_LINE( "*** END OF TEST 24 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+ end if;
+
+ TEST_SUPPORT.PUT_NAME(
+ SPTEST.TASK_NAME( INTEGER( TEST_SUPPORT.TASK_NUMBER( TID ) ) ),
+ FALSE
+ );
+
+ TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
+ TEXT_IO.NEW_LINE;
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ end loop;
+
+ end TASK_1_THROUGH_3;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp24/sptest.ads b/c/src/ada-tests/sptests/sp24/sptest.ads
new file mode 100644
index 0000000000..c9912cfb6b
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp24/sptest.ads
@@ -0,0 +1,137 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 24 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:44 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS timers created
+-- by this test.
+--
+
+ TIMER_ID : array ( 1 .. 3 ) of RTEMS.ID;
+ TIMER_NAME : array ( 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- RESUME_TASK
+--
+-- DESCRIPTION:
+--
+-- This subprogram is scheduled as a timer service routine. When
+-- it fires it resumes the task which is mapped to this timer.
+--
+
+ procedure RESUME_TASK (
+ TIMER_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- TASK_1_THROUGH_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Timer Manager.
+--
+
+ procedure TASK_1_THROUGH_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 3, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp25/sptest.adb b/c/src/ada-tests/sptests/sp25/sptest.adb
new file mode 100644
index 0000000000..f66bfe339f
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp25/sptest.adb
@@ -0,0 +1,368 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 25 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.3 1995/07/12 19:42:47 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_TEST_SUPPORT;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST 25 ***" );
+
+ SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ SPTEST.TASK_NAME( 1 ),
+ SPTEST.BASE_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ SPTEST.TASK_ID( 1 ),
+ SPTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
+
+ RTEMS.REGION_CREATE(
+ SPTEST.REGION_NAME( 1 ),
+ SPTEST.AREA_1'ADDRESS,
+ 64000,
+ 32,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SPTEST.REGION_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PUT_ADDRESS_FROM_AREA_1
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_1 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ ) is
+
+ begin
+
+ UNSIGNED32_IO.PUT(
+ RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
+ WIDTH => 8,
+ BASE => 16
+ );
+
+ end PUT_ADDRESS_FROM_AREA_1;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ RNID : RTEMS.ID;
+ SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_4 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_5 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_6 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_7 : RTEMS.ADDRESS;
+ SEGMENT_ADDRESS_8 : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.REGION_IDENT( SPTEST.REGION_NAME( 1 ), RNID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_IDENT OF RN1" );
+ TEXT_IO.PUT( "TA1 - region_ident - rnid => " );
+ UNSIGNED32_IO.PUT( RNID, WIDTH => 8, BASE => 16 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "64 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 64,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "128 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 128,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "256 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 256,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "512 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 512,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "1024 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 1024,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_5,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_5 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "2048 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 2048,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_6,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_6 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "4096 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 4096,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_7,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_7 );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+ TEXT_IO.PUT_LINE( "8192 byte segment from region 1" );
+ RTEMS.REGION_GET_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ 8192,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ SEGMENT_ADDRESS_8,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+ TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_8 );
+ TEXT_IO.NEW_LINE;
+
+TEST_SUPPORT.PAUSE;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_3 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_4,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_4 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_1 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_2 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_7 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_7,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_7 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_6 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_6,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_6 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_8 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_8,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_8 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT(
+ "TA1 - region_return_segment - return segment to region 1 - "
+ );
+ SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_5 );
+ RTEMS.REGION_RETURN_SEGMENT(
+ SPTEST.REGION_ID( 1 ),
+ SEGMENT_ADDRESS_5,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+ TEXT_IO.NEW_LINE;
+ SEGMENT_ADDRESS_5 := RTEMS.NULL_ADDRESS;
+
+ TEXT_IO.PUT_LINE(
+ "TA1 - region_delete - walks heap if debug enabled"
+ );
+ RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST 25 ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/sp25/sptest.ads b/c/src/ada-tests/sptests/sp25/sptest.ads
new file mode 100644
index 0000000000..cf9a916ea4
--- /dev/null
+++ b/c/src/ada-tests/sptests/sp25/sptest.ads
@@ -0,0 +1,158 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 25 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:48 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS regions created
+-- by this test.
+--
+
+ REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+ REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+-- The following constant defines the priority of most of the
+-- RTEMS tasks in this test. This allows one of the tasks to
+-- easily set itself to a higher priority than the rest.
+--
+
+ BASE_PRIORITY : constant RTEMS.TASK_PRIORITY := 140;
+
+--
+-- These arrays define the memory areas used for the regions in
+-- this test.
+--
+
+ AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 64000 ) of RTEMS.UNSIGNED8;
+ for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PUT_ADDRESS_FROM_AREA_1
+--
+-- DESCRIPTION:
+--
+-- This subprogram prints the offset of the address TO_BE_PRINTED
+-- from the first byte of AREA_1.
+--
+-- NOTE:
+--
+-- This subprogram is used because the actual address of AREA_1
+-- varies based upon the size of the executable, the target board,
+-- and the target processor.
+--
+
+ procedure PUT_ADDRESS_FROM_AREA_1 (
+ TO_BE_PRINTED : in RTEMS.ADDRESS
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task tests the Region Manager.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 1, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 100 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/spsize/sptest.adb b/c/src/ada-tests/sptests/spsize/sptest.adb
new file mode 100644
index 0000000000..e4db587639
--- /dev/null
+++ b/c/src/ada-tests/sptests/spsize/sptest.adb
@@ -0,0 +1,199 @@
+--
+-- SPTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.adb,v 1.2 1995/05/31 16:39:50 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_TEST_SUPPORT;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TEST SIZE ***" );
+
+ SPTEST.PUT_SIZE(
+ "Tasks",
+ TRUE,
+ "maximum_tasks",
+ RTEMS_TEST_SUPPORT.PER_TASK
+ );
+
+ SPTEST.PUT_SIZE(
+ "Timers",
+ TRUE,
+ "maximum_timers",
+ RTEMS_TEST_SUPPORT.PER_TIMER
+ );
+
+ SPTEST.PUT_SIZE(
+ "Semaphores",
+ TRUE,
+ "maximum_semaphores",
+ RTEMS_TEST_SUPPORT.PER_SEMAPHORE
+ );
+
+ SPTEST.PUT_SIZE(
+ "Message Queues",
+ TRUE,
+ "maximum_message_queues",
+ RTEMS_TEST_SUPPORT.PER_MESSAGE_QUEUE
+ );
+
+ SPTEST.PUT_SIZE(
+ "Messages",
+ TRUE,
+ "maximum_messages",
+ RTEMS_TEST_SUPPORT.PER_MESSAGE
+ );
+
+ SPTEST.PUT_SIZE(
+ "Regions",
+ TRUE,
+ "maximum_regions",
+ RTEMS_TEST_SUPPORT.PER_REGION
+ );
+
+ SPTEST.PUT_SIZE(
+ "Partitions",
+ TRUE,
+ "maximum_paritions",
+ RTEMS_TEST_SUPPORT.PER_PARTITION
+ );
+
+ SPTEST.PUT_SIZE(
+ "Ports",
+ TRUE,
+ "maximum_ports",
+ RTEMS_TEST_SUPPORT.PER_PORT
+ );
+
+ SPTEST.PUT_SIZE(
+ "Periods",
+ TRUE,
+ "maximum_periods",
+ RTEMS_TEST_SUPPORT.PER_PERIOD
+ );
+
+ SPTEST.PUT_SIZE(
+ "Extensions",
+ TRUE,
+ "maximum_extensions",
+ RTEMS_TEST_SUPPORT.PER_EXTENSION
+ );
+
+ SPTEST.PUT_SIZE(
+ "Device Drivers",
+ TRUE,
+ "number_of_device_drivers",
+ RTEMS_TEST_SUPPORT.PER_DRIVER
+ );
+
+ SPTEST.PUT_SIZE(
+ "System Requirements",
+ FALSE,
+ REQUIREMENT => RTEMS_TEST_SUPPORT.SYSTEM_REQUIREMENTS
+ );
+
+ SPTEST.PUT_SIZE(
+ "Floating Point Tasks",
+ TRUE,
+ "FP attributes",
+ RTEMS_TEST_SUPPORT.PER_FP_TASK
+ );
+
+ TEXT_IO.PUT_LINE( "User's Tasks' Stacks - " );
+ TEXT_IO.NEW_LINE;
+
+ TEXT_IO.PUT_LINE( "Interrupt Stacks - " );
+ TEXT_IO.NEW_LINE;
+
+ SPTEST.PUT_SIZE(
+ "Global object tables",
+ TRUE,
+ "maximum_nodes",
+ RTEMS_TEST_SUPPORT.PER_NODE
+ );
+
+ SPTEST.PUT_SIZE(
+ "Global objects",
+ TRUE,
+ "maximum_global_objects",
+ RTEMS_TEST_SUPPORT.PER_GLOBAL_OBJECT
+ );
+
+ SPTEST.PUT_SIZE(
+ "Proxies",
+ TRUE,
+ "maximum_proxies",
+ RTEMS_TEST_SUPPORT.PER_PROXY
+ );
+
+ TEXT_IO.PUT_LINE( "*** END OF TEST SIZE ***" );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end INIT;
+
+--PAGE
+--
+-- PUT_SIZE
+--
+
+ procedure PUT_SIZE (
+ DESCRIPTION : in STRING;
+ HAS_FIELD_NAME : in BOOLEAN;
+ FIELD_NAME : in STRING := "";
+ REQUIREMENT : in RTEMS.UNSIGNED32 := 0
+ ) is
+ SPACES : constant STRING := " ";
+ begin
+
+ -- 21 is length of longest description (task's stacks)
+
+ TEXT_IO.PUT( DESCRIPTION );
+ TEXT_IO.PUT( SPACES( 1 .. 21 - DESCRIPTION'LENGTH ) );
+ TEXT_IO.PUT( " - " );
+ if HAS_FIELD_NAME = TRUE then
+ TEXT_IO.PUT( FIELD_NAME );
+ TEXT_IO.PUT( " * " );
+ end if;
+ UNSIGNED32_IO.PUT( REQUIREMENT );
+ TEXT_IO.NEW_LINE;
+
+ end PUT_SIZE;
+
+
+end SPTEST;
diff --git a/c/src/ada-tests/sptests/spsize/sptest.ads b/c/src/ada-tests/sptests/spsize/sptest.ads
new file mode 100644
index 0000000000..d83a37039c
--- /dev/null
+++ b/c/src/ada-tests/sptests/spsize/sptest.ads
@@ -0,0 +1,111 @@
+--
+-- SPTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Single Processor Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- sptest.ads,v 1.3 1995/07/12 19:42:55 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PUT_SIZE
+--
+-- DESCRIPTION:
+--
+-- This procedure outputs the size information about the specified
+-- object in a standard format.
+--
+
+ procedure PUT_SIZE (
+ DESCRIPTION : in STRING;
+ HAS_FIELD_NAME : in BOOLEAN;
+ FIELD_NAME : in STRING := "";
+ REQUIREMENT : in RTEMS.UNSIGNED32 := 0
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ RTEMS.NO_DRIVER_ENTRY, -- Open
+ RTEMS.NO_DRIVER_ENTRY, -- Close
+ RTEMS.NO_DRIVER_ENTRY, -- Read
+ RTEMS.NO_DRIVER_ENTRY, -- Write
+ RTEMS.NO_DRIVER_ENTRY -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ SPTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 64 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 50 -- # ticks in a timeslice
+ );
+
+end SPTEST;
diff --git a/c/src/ada-tests/tmtests/tm01/tmtest.adb b/c/src/ada-tests/tmtests/tm01/tmtest.adb
new file mode 100644
index 0000000000..242e09d4ec
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm01/tmtest.adb
@@ -0,0 +1,274 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 1 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:02 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 1 ***" );
+
+ TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+ TMTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
+ TMTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
+
+ RTEMS.TASK_CREATE(
+ TMTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ SEMAPHORE_OBTAIN_TIME : RTEMS.UNSIGNED32;
+ SEMAPHORE_RELEASE_TIME : RTEMS.UNSIGNED32;
+ SEMAPHORE_OBTAIN_NO_WAIT_TIME : RTEMS.UNSIGNED32;
+ SEMAPHORE_OBTAIN_LOOP_TIME : RTEMS.UNSIGNED32;
+ SEMAPHORE_RELEASE_LOOP_TIME : RTEMS.UNSIGNED32;
+ INDEX : RTEMS.UNSIGNED32;
+ ITERATIONS : RTEMS.UNSIGNED32;
+ NAME : RTEMS.NAME;
+ SMID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ NAME := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
+
+ SEMAPHORE_OBTAIN_TIME := 0;
+ SEMAPHORE_RELEASE_TIME := 0;
+ SEMAPHORE_OBTAIN_NO_WAIT_TIME := 0;
+ SEMAPHORE_OBTAIN_LOOP_TIME := 0;
+ SEMAPHORE_RELEASE_LOOP_TIME := 0;
+
+-- Time one invocation of SEMAPHORE_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.SEMAPHORE_CREATE(
+ NAME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SMID,
+ STATUS
+ );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_CREATE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_CREATE
+ );
+
+-- Time one invocation of SEMAPHORE_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.SEMAPHORE_DELETE( SMID, STATUS );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_DELETE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_DELETE
+ );
+
+-- Create semaphore for repeated operations.
+
+ RTEMS.SEMAPHORE_CREATE(
+ NAME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ SMID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
+
+-- Perform repeated SEMAPHORE OBTAIN's and RELEASE's
+
+ for ITERATIONS in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ SEMAPHORE_OBTAIN_LOOP_TIME := SEMAPHORE_OBTAIN_LOOP_TIME +
+ TMTEST.END_TIME;
+ SEMAPHORE_RELEASE_LOOP_TIME := SEMAPHORE_RELEASE_LOOP_TIME +
+ TMTEST.END_TIME;
+
+ -- Semaphore_obtain (available loop)
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ SMID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end loop;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ SEMAPHORE_OBTAIN_TIME := SEMAPHORE_OBTAIN_TIME + TMTEST.END_TIME;
+
+ -- Semaphore_release
+
+ TIMER_DRIVER.INITIALIZE;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
+
+ end loop;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
+ TMTEST.END_TIME;
+
+ -- Semaphore_p (NO_WAIT)
+
+ TIMER_DRIVER.INITIALIZE;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ SMID,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end loop;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ SEMAPHORE_OBTAIN_NO_WAIT_TIME :=
+ SEMAPHORE_OBTAIN_NO_WAIT_TIME + TMTEST.END_TIME;
+
+ -- Semaphore_v
+
+ TIMER_DRIVER.INITIALIZE;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
+
+ end loop;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
+ TMTEST.END_TIME;
+
+ end loop;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_OBTAIN (semaphore available)",
+ SEMAPHORE_OBTAIN_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT *
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ SEMAPHORE_OBTAIN_LOOP_TIME,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_OBTAIN (NO_WAIT)",
+ SEMAPHORE_OBTAIN_NO_WAIT_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT *
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ SEMAPHORE_OBTAIN_LOOP_TIME,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_RELEASE (no task waiting)",
+ SEMAPHORE_RELEASE_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT *
+ TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
+ SEMAPHORE_RELEASE_LOOP_TIME * 2,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
+ );
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm01/tmtest.ads b/c/src/ada-tests/tmtests/tm01/tmtest.ads
new file mode 100644
index 0000000000..7078b5e675
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm01/tmtest.ads
@@ -0,0 +1,106 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 1 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:03 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task performs the all of the timing operations in this test.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 2, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm02/tmtest.adb b/c/src/ada-tests/tmtests/tm02/tmtest.adb
new file mode 100644
index 0000000000..18b4d6a3db
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm02/tmtest.adb
@@ -0,0 +1,208 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 2 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:05 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 2 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT is
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ INDEX : RTEMS.UNSIGNED32;
+ HIGH_ID : RTEMS.ID;
+ LOW_ID : RTEMS.ID;
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ PRIORITY := 5;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ HIGH_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF HIGH TASK" );
+
+ PRIORITY := PRIORITY + 1;
+
+ RTEMS.TASK_START(
+ HIGH_ID,
+ TMTEST.HIGH_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF HIGH TASK" );
+
+ for INDEX in 2 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE MIDDLE" );
+
+ PRIORITY := PRIORITY + 1;
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.MIDDLE_TASKS'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START MIDDLE" );
+
+ end loop;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
+ PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ LOW_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF LOW TASK" );
+
+ RTEMS.TASK_START( LOW_ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF LOW TASK" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.SEMAPHORE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_OBTAIN (blocking)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm02/tmtest.ads b/c/src/ada-tests/tmtests/tm02/tmtest.ads
new file mode 100644
index 0000000000..4b2a632dac
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm02/tmtest.ads
@@ -0,0 +1,141 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 2 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:07 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the semaphore used for timing operations.
+--
+
+ SEMAPHORE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task starts the timer and performs a blocking
+-- SEMAPHORE_OBTAIN.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS task start the timer and performs a blocking
+-- SEMAPHORE_OBTAIN.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution time for
+-- a blocking SEMAPHORE_OBTAIN.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 101, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm03/tmtest.adb b/c/src/ada-tests/tmtests/tm03/tmtest.adb
new file mode 100644
index 0000000000..8a5fdd3cbc
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm03/tmtest.adb
@@ -0,0 +1,193 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 3 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:10 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 3 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ),
+ 252,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TEST_INIT" );
+
+ RTEMS.TASK_START( TASK_ID, TMTEST.TEST_INIT'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TEST_INIT" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ PRIORITY := 250;
+
+ RTEMS.SEMAPHORE_CREATE(
+ RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.SEMAPHORE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
+
+ for INDEX in 2 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE MIDDLE" );
+
+ PRIORITY := PRIORITY - 1;
+
+ RTEMS.TASK_START( TASK_ID, TMTEST.MIDDLE_TASKS'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START MIDDLE" );
+
+ end loop;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF HIGH TASK" );
+
+ RTEMS.TASK_START( TASK_ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF HIGH TASK" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_RELEASE (preemptive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm03/tmtest.ads b/c/src/ada-tests/tmtests/tm03/tmtest.ads
new file mode 100644
index 0000000000..530b336191
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm03/tmtest.ads
@@ -0,0 +1,133 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 3 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:10 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the semaphore used for timing operations.
+--
+
+ SEMAPHORE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization. After completion
+-- of test initialization, the timer is started and a preemptive
+-- SEMAPHORE_RELEASE is performed.
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task performs a blocking SEMAPHORE_OBTAIN. Once
+-- is obtains the semaphore unit and executes again, it performs
+-- a preemptive SEMAPHORE_RELEASE.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution
+-- timer for a preemptive SEMAPHORE_RELEASE.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 101, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm04/tmtest.adb b/c/src/ada-tests/tmtests/tm04/tmtest.adb
new file mode 100644
index 0000000000..e979ad4746
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm04/tmtest.adb
@@ -0,0 +1,500 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 4 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:13 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 4 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_COUNT := TIME_TEST_SUPPORT.OPERATION_COUNT;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 10,
+ 1024,
+ RTEMS.NO_PREEMPT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TMTEST.LOW_TASKS'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ RTEMS.SEMAPHORE_CREATE(
+ RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.SEMAPHORE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGHEST_TASK
+--
+
+ procedure HIGHEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ OLD_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if ARGUMENT = 1 then
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART (blocked, preempt)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+
+ RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, OLD_PRIORITY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ elsif ARGUMENT = 2 then
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART (ready, preempt)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
+
+ else
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end if;
+
+ end HIGHEST_TASK;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ OLD_PRIORITY : RTEMS.TASK_PRIORITY;
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ NAME : RTEMS.NAME;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_RESTART( TMTEST.HIGHEST_ID, 1, STATUS );
+ -- preempted by Higher_task
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_RESTART( TMTEST.HIGHEST_ID, 2, STATUS );
+ -- preempted by Higher_task
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_RELEASE (readying)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
+ end loop;
+
+ NAME := RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_CREATE(
+ NAME,
+ 10,
+ 1024,
+ RTEMS.NO_PREEMPT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_CREATE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TMTEST.LOW_TASKS'ACCESS,
+ 0,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_START",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_START
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
+ end loop;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_CREATE(
+ NAME,
+ 250,
+ 1024,
+ RTEMS.NO_PREEMPT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TMTEST.RESTART_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+ RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND LOOP" );
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 0, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART (suspended)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND LOOP" );
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_DELETE (suspended)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_DELETE
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_CREATE(
+ NAME,
+ 250,
+ 1024,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TMTEST.RESTART_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 1, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART (ready)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_SET_PRIORITY(
+ TMTEST.TASK_ID( INDEX ),
+ 5,
+ OLD_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY LOOP" );
+ end loop;
+
+ -- yield processor -- tasks block
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 1, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART (blocked, no preempt)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+
+ -- yield processor -- tasks block
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_DELETE (blocked)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_DELETE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- LOW_TASKS
+--
+
+ procedure LOW_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_COUNT := TMTEST.TASK_COUNT - 1;
+
+ if TMTEST.TASK_COUNT = 0 then
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', ' ', ' ' ),
+ 5,
+ 2048,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HI" );
+
+ RTEMS.TASK_START(
+ ID,
+ TMTEST.HIGH_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HI" );
+
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
+ 3,
+ 2048,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.HIGHEST_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" );
+
+ RTEMS.TASK_START(
+ TMTEST.HIGHEST_ID,
+ TMTEST.HIGHEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" );
+
+
+ end if;
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end LOW_TASKS;
+
+--PAGE
+--
+-- RESTART_TASK
+--
+
+ procedure RESTART_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if ARGUMENT = 1 then
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ end if;
+
+ end RESTART_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm04/tmtest.ads b/c/src/ada-tests/tmtests/tm04/tmtest.ads
new file mode 100644
index 0000000000..1239bf63e4
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm04/tmtest.ads
@@ -0,0 +1,199 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 4 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:13 joel Exp
+--
+
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32
+ range 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+--
+-- This variable contains the id of the highest priority task
+-- in the system.
+--
+
+ HIGHEST_ID : RTEMS.ID;
+
+--
+-- The following is the ID of the semaphore used for timing operations.
+--
+
+ SEMAPHORE_ID : RTEMS.ID;
+
+--
+-- The following is used to perform the same operation
+-- on a group of tasks.
+--
+
+ TASK_COUNT : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- HIGHEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is created by one of the LOW_TASKS. The
+-- first time it executes, it performs a blocking SEMAPHORE_OBTAIN
+-- which transfers control of the processor to HIGH_TASK.
+-- The first time HIGHEST_TASK is restarted, it stops the
+-- timer and reports the execution time for a TASK_RESTART
+-- for a blocked task which preempts the caller. The second
+-- time HIGHEST_TASK is restarted, it stops the timer and reports
+-- the execution time for a TASK_RESTART for a ready task which
+-- has its original priority restored and preempts the caller.
+--
+
+ procedure HIGHEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is created by one of the LOW_TASKS. This
+-- task restarts HIGHEST_TASK twice. HIGHEST_TASK is blocked the
+-- first time and preempts this task when restarted. HIGHEST_TASK
+-- is ready the second time but has lowered its priority. When
+-- restarted for the second time, HIGHEST_TASK will have its
+-- original priority restored and preempt this task.
+-- Once control of the processor is returned to this task after
+-- HIGHEST_TASK deletes itself, the following execution times
+-- are measured and reported.
+--
+-- + readying SEMAPHORE_RELEASE
+-- + TASK_CREATE
+-- + TASK_START
+-- + TASK_RESTART of a suspended task
+-- + TASK_DELETE of a suspended task
+-- + TASK_RESTART of a ready task
+-- + TASK_RESTART of a blocked task which does not cause a preempt
+-- + TASK_DELETE of a blocked task
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASKS
+--
+-- DESCRIPTION:
+--
+-- The last of these RTEMS tasks to execute creates HIGH_TASK
+-- and HIGHEST_TASK. All of these tasks perform a blocking
+-- SEMAPHORE_OBTAIN.
+--
+
+ procedure LOW_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- RESTART_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task
+--
+
+ procedure RESTART_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm05/tmtest.adb b/c/src/ada-tests/tmtests/tm05/tmtest.adb
new file mode 100644
index 0000000000..5f9db02171
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm05/tmtest.adb
@@ -0,0 +1,174 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 5 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:16 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 5 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ if INDEX = 0 then
+ TASK_ENTRY := TMTEST.LOW_TASK'ACCESS;
+ elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TMTEST.TASK_ID( INDEX ), TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESUME causing preempt",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_RESUME
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+ TMTEST.TASK_INDEX := TMTEST.TASK_INDEX + 1;
+ RTEMS.TASK_RESUME( TMTEST.TASK_ID( TMTEST.TASK_INDEX ), STATUS );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SUSPEND self",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_SUSPEND
+ );
+
+ TMTEST.TASK_INDEX := 1;
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_RESUME( TMTEST.TASK_ID( TMTEST.TASK_INDEX ), STATUS );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm05/tmtest.ads b/c/src/ada-tests/tmtests/tm05/tmtest.ads
new file mode 100644
index 0000000000..ad2aaa7b2a
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm05/tmtest.ads
@@ -0,0 +1,151 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 5 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:17 joel Exp
+--
+
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+ TASK_INDEX : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the highest priority task in the system.
+-- It starts the timer and performs a TASK_SUSPEND on SELF.
+-- When this task executes again, it stops the timer and
+-- reports the execution time for a preemptive TASK_RESUME.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a TASK_SUSPEND on SELF. When each
+-- task executes again, it performs preemptive TASK_RESUME on
+-- a higher priority task.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the lowest priority task in the system.
+-- When this task executes, it stops the timer and reports the
+-- execution time for a blocking TASK_SUSPEND. After this,
+-- it starts the timer and performs a TASK_RESUME on a
+-- higher priority task.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 101, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm06/tmtest.adb b/c/src/ada-tests/tmtests/tm06/tmtest.adb
new file mode 100644
index 0000000000..fafa2e11ea
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm06/tmtest.adb
@@ -0,0 +1,210 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 6 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:19 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 6 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ INDEX : RTEMS.UNSIGNED32;
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_RESTARTED := TIME_TEST_SUPPORT.OPERATION_COUNT;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if TMTEST.TASK_RESTARTED = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TIMER_DRIVER.INITIALIZE;
+ end if;
+
+ TMTEST.TASK_RESTARTED := TMTEST.TASK_RESTARTED - 1;
+
+ if TMTEST.TASK_RESTARTED /= 0 then
+ RTEMS.TASK_RESTART( RTEMS.SELF, 0, STATUS );
+ end if;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART self",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 254,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TMTEST.NULL_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SUSPEND no preempt",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_SUSPEND
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_RESUME( TMTEST.TASK_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESUME no preempt",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_RESUME
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_DELETE others",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_DELETE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- NULL_TASK
+--
+
+ procedure NULL_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ NULL;
+
+ end NULL_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm06/tmtest.ads b/c/src/ada-tests/tmtests/tm06/tmtest.ads
new file mode 100644
index 0000000000..ab0ca93244
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm06/tmtest.ads
@@ -0,0 +1,142 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 6 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:20 joel Exp
+--
+
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+--
+-- This variable is used to determine which restart of TASK_1 will start
+-- timer and which will stop the timer and report the execution time.
+--
+
+ TASK_RESTARTED : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + TASK_RESTART of SELF
+-- + TASK_SUSPEND of another task with no context switch
+-- + TASK_RESUME with no preemption
+-- + TASK_DELETE of another task
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- NULL_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task has no operations. It is used to have
+-- tasks to perform directives upon.
+--
+
+ procedure NULL_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 101, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm07/tmtest.adb b/c/src/ada-tests/tmtests/tm07/tmtest.adb
new file mode 100644
index 0000000000..f83e5e706d
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm07/tmtest.adb
@@ -0,0 +1,179 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 7 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:22 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 7 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ if INDEX = 0 then
+ TASK_ENTRY := TMTEST.LOW_TASK'ACCESS;
+ elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TMTEST.TASK_ID( INDEX ), TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ OLD_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if ARGUMENT > 0 then
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART suspended/preempt",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_RESTART
+ );
+ else
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ end if;
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_INDEX := TMTEST.TASK_INDEX + 1;
+
+ if ARGUMENT > 0 then
+ RTEMS.TASK_RESTART(
+ TMTEST.TASK_ID( TMTEST.TASK_INDEX ),
+ 16#7FFFFFFF#,
+ STATUS
+ );
+ else
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ end if;
+
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_INDEX := 1;
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.TASK_RESTART(
+ TMTEST.TASK_ID( TMTEST.TASK_INDEX ),
+ 16#7FFFFFFF#,
+ STATUS
+ );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm07/tmtest.ads b/c/src/ada-tests/tmtests/tm07/tmtest.ads
new file mode 100644
index 0000000000..e66c64067b
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm07/tmtest.ads
@@ -0,0 +1,149 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 7 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:23 joel Exp
+--
+
+with TIMER_DRIVER;
+with TIME_TEST_SUPPORT;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+ TASK_INDEX : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the highest priority task in the system.
+-- The first time it executes it suspends itself. When restarted
+-- it stops the timer and reports the time for a TASK_RESTART
+-- of a suspended task which results in a preemption.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks suspend themselves the first time they execute.
+-- When restarted they perform a TASK_RESTART of a suspended
+-- higher priority task which results in a preemption.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the lowest priority task in the system.
+-- When it executes it starts the timer and restarts a higher
+-- priority task which immediately preempts this task.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 101, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm08/tmtest.adb b/c/src/ada-tests/tmtests/tm08/tmtest.adb
new file mode 100644
index 0000000000..1f50eaa0f6
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm08/tmtest.adb
@@ -0,0 +1,341 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 8 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:25 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 8 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 128,
+ 1024,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 254,
+ 1024,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK1'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ OLD_PRIORITY : RTEMS.TASK_PRIORITY;
+ OLD_MODE : RTEMS.MODE;
+ OLD_NOTE : RTEMS.NOTEPAD_INDEX;
+ TIME : RTEMS.TIME_OF_DAY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_SET_PRIORITY(
+ TMTEST.TASK_ID,
+ RTEMS.CURRENT_PRIORITY,
+ OLD_PRIORITY,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SET_PRIORITY current priority",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_SET_PRIORITY(
+ TMTEST.TASK_ID,
+ 253,
+ OLD_PRIORITY,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SET_PRIORITY no preempt",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_MODE(
+ RTEMS.CURRENT_MODE,
+ RTEMS.CURRENT_MODE,
+ OLD_MODE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_MODE (current)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_MODE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 1 ),
+ RTEMS.INTERRUPT_MASK,
+ OLD_MODE,
+ STATUS
+ );
+ RTEMS.TASK_MODE(
+ RTEMS.INTERRUPT_LEVEL( 0 ),
+ RTEMS.INTERRUPT_MASK,
+ OLD_MODE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_MODE (no reschedule)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_MODE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_MODE(
+ RTEMS.NO_ASR,
+ RTEMS.ASR_MASK,
+ OLD_MODE,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_MODE (reschedule)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_MODE
+ );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ OLD_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ RTEMS.TASK_SET_PRIORITY(
+ TMTEST.TASK_ID,
+ 1,
+ OLD_PRIORITY,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_MODE( -- preempted by TEST_TASK1
+ RTEMS.PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ OLD_MODE,
+ STATUS
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_SET_NOTE(
+ TMTEST.TASK_ID,
+ 8,
+ 10,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SET_NOTE ",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_SET_NOTE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_GET_NOTE(
+ TMTEST.TASK_ID,
+ 8,
+ OLD_NOTE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_GET_NOTE ",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_GET_NOTE
+ );
+
+ TIME := (1988, 1, 1, 0, 0, 0, 0 );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.CLOCK_SET(
+ TIME,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "CLOCK_SET",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.CLOCK_SET
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "CLOCK_GET",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.CLOCK_GET
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+--PAGE
+--
+-- TEST_TASK1
+--
+
+ procedure TEST_TASK1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_MODE (preemptive) ",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_MODE
+ );
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+ end TEST_TASK1;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm08/tmtest.ads b/c/src/ada-tests/tmtests/tm08/tmtest.ads
new file mode 100644
index 0000000000..2ece9083ce
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm08/tmtest.ads
@@ -0,0 +1,137 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 8 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:26 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+ TASK_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + TASK_SET_PRIORITY to obtain the current priority
+-- + TASK_SET_PRIORITY which does not require a context switch
+-- + TASK_MODE to obtain the current mode
+-- + TASK_MODE which does not require a reschedule
+-- + TASK_MODE which does require a reschedule
+-- + TASK_MODE which causes a preemption *** TEST_TASK1 executes
+-- + TASK_SET_NOTE
+-- + TASK_GET_NOTE
+-- + CLOCK_SET
+-- + CLOCK_GET
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + TASK_MODE which results in a preemption
+--
+
+ procedure TEST_TASK1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 101, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm09/tmtest.adb b/c/src/ada-tests/tmtests/tm09/tmtest.adb
new file mode 100644
index 0000000000..801a610fe7
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm09/tmtest.adb
@@ -0,0 +1,295 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 9 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:28 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 9 ***" );
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 128,
+ 4096,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ 1,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_OPTIONS,
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_CREATE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_CREATE
+ );
+
+ TMTEST.QUEUE_TEST;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_DELETE(
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_DELETE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_DELETE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+--PAGE
+--
+-- QUEUE_TEST
+--
+
+ procedure QUEUE_TEST
+ is
+ SEND_LOOP_TIME : RTEMS.UNSIGNED32;
+ URGENT_LOOP_TIME : RTEMS.UNSIGNED32;
+ RECEIVE_LOOP_TIME : RTEMS.UNSIGNED32;
+ SEND_TIME : RTEMS.UNSIGNED32;
+ URGENT_TIME : RTEMS.UNSIGNED32;
+ RECEIVE_TIME : RTEMS.UNSIGNED32;
+ EMPTY_FLUSH_TIME : RTEMS.UNSIGNED32;
+ FLUSH_TIME : RTEMS.UNSIGNED32;
+ FLUSH_COUNT : RTEMS.UNSIGNED32;
+ EMPTY_FLUSH_COUNT : RTEMS.UNSIGNED32;
+ INDEX : RTEMS.UNSIGNED32;
+ ITERATIONS : RTEMS.UNSIGNED32;
+ LOOP_COUNT : RTEMS.UNSIGNED32;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ SEND_LOOP_TIME := 0;
+ URGENT_LOOP_TIME := 0;
+ RECEIVE_LOOP_TIME := 0;
+ SEND_TIME := 0;
+ URGENT_TIME := 0;
+ RECEIVE_TIME := 0;
+ EMPTY_FLUSH_TIME := 0;
+ FLUSH_TIME := 0;
+ FLUSH_COUNT := 0;
+ EMPTY_FLUSH_COUNT := 0;
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ for ITERATIONS in 1 .. TIME_TEST_SUPPORT.ITERATION_COUNT
+ loop
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ SEND_LOOP_TIME := SEND_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ URGENT_LOOP_TIME := URGENT_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ RECEIVE_LOOP_TIME := RECEIVE_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_SEND(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+ end loop;
+ SEND_TIME := SEND_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ end loop;
+ RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+ end loop;
+ URGENT_TIME := URGENT_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ end loop;
+ RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_FLUSH(
+ TMTEST.QUEUE_ID,
+ EMPTY_FLUSH_COUNT,
+ STATUS
+ );
+ EMPTY_FLUSH_TIME := EMPTY_FLUSH_TIME + TIMER_DRIVER.READ_TIMER;
+
+ -- send one message to flush
+ RTEMS.MESSAGE_QUEUE_SEND(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_FLUSH(
+ TMTEST.QUEUE_ID,
+ FLUSH_COUNT,
+ STATUS
+ );
+ FLUSH_TIME := FLUSH_TIME + TIMER_DRIVER.READ_TIMER;
+
+ end loop;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_SEND (no tasks waiting)",
+ SEND_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT *
+ TIME_TEST_SUPPORT.ITERATION_COUNT,
+ SEND_LOOP_TIME,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_URGENT (no tasks waiting)",
+ URGENT_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT *
+ TIME_TEST_SUPPORT.ITERATION_COUNT,
+ URGENT_LOOP_TIME,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_RECEIVE (messages available)",
+ RECEIVE_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT *
+ TIME_TEST_SUPPORT.ITERATION_COUNT * 2,
+ RECEIVE_LOOP_TIME * 2,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_FLUSH (empty queue)",
+ EMPTY_FLUSH_TIME,
+ TIME_TEST_SUPPORT.ITERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_FLUSH (messages flushed)",
+ FLUSH_TIME,
+ TIME_TEST_SUPPORT.ITERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH
+ );
+
+ end QUEUE_TEST;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm09/tmtest.ads b/c/src/ada-tests/tmtests/tm09/tmtest.ads
new file mode 100644
index 0000000000..be1ffe9dc6
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm09/tmtest.ads
@@ -0,0 +1,125 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 9 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:29 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + MESSAGE_QUEUE_CREATE
+-- + MESSAGE_QUEUE_DELETE
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- QUEUE_TEST
+--
+-- DESCRIPTION:
+--
+-- This subprogram is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + MESSAGE_QUEUE_SEND with no tasks waiting
+-- + MESSAGE_QUEUE_URGENT with no tasks waiting
+-- + MESSAGE_QUEUE_RECEIVE with messages available
+-- + MESSAGE_QUEUE_FLUSH with an empty message queue
+-- + MESSAGE_QUEUE_FLUSH with messages flushed
+--
+
+ procedure QUEUE_TEST;
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 2, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 110, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm10/tmtest.adb b/c/src/ada-tests/tmtests/tm10/tmtest.adb
new file mode 100644
index 0000000000..8638a473b3
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm10/tmtest.adb
@@ -0,0 +1,218 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 10 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:32 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 10 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ TASK_ID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ PRIORITY := 5;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY + 1;
+
+ if INDEX = 0 then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.LOW_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ 1,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_OPTIONS,
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_RECEIVE (NO_WAIT)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE
+ );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_RECEIVE (blocking)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm10/tmtest.ads b/c/src/ada-tests/tmtests/tm10/tmtest.ads
new file mode 100644
index 0000000000..8a8ae2700a
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm10/tmtest.ads
@@ -0,0 +1,142 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 10 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:32 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization. After initialization
+-- has been completed, the NO_WAIT case for MESSAGE_QUEUE_RECEIVE
+-- is timed and reported.
+--
+
+ procedure TEST_INIT;
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the highest priority task in the system.
+-- It starts the timer and performs a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution time
+-- of a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 110, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm11/tmtest.adb b/c/src/ada-tests/tmtests/tm11/tmtest.adb
new file mode 100644
index 0000000000..5540364a97
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm11/tmtest.adb
@@ -0,0 +1,211 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 11 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:35 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 11 ***" );
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 251,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.TEST_INIT'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ TASK_ID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+-- As each task is started, it preempts this task and performs a blocking
+-- MESSAGE_QUEUE_RECEIVE. Upon completion of this loop all created tasks
+-- are blocked.
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ),
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_OPTIONS,
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_SEND(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_SEND (preemptive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ end MIDDLE_TASKS;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm11/tmtest.ads b/c/src/ada-tests/tmtests/tm11/tmtest.ads
new file mode 100644
index 0000000000..2c415ee513
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm11/tmtest.ads
@@ -0,0 +1,139 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 11 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:36 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization. As each application
+-- task is created and started, it will preempt this task and
+-- perform a blocking MESSAGE_QUEUE_RECEIVE. Once all of the
+-- initialization is completed, the timer is started and the first
+-- preemptive MESSAGE_QUEUE_SEND is executed.
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the highest priority task in the system.
+-- It performs a blocking blocking MESSAGE_QUEUE_RECEIVE. It is
+-- the last test task created and started. Thus it is the last
+-- task to be enqueued waiting for a message and the last task
+-- to receive the message. Once it receives the message, it
+-- stops the timer and reports the execution time for a
+-- preemptive MESSAGE_QUEUE_SEND.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- As each of these RTEMS tasks is created and started, it preempts
+-- the initialization task and perform a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm12/tmtest.adb b/c/src/ada-tests/tmtests/tm12/tmtest.adb
new file mode 100644
index 0000000000..732f244056
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm12/tmtest.adb
@@ -0,0 +1,208 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 12 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:38 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 12 ***" );
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 251,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.TEST_INIT'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ TASK_ID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ),
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_OPTIONS,
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.LOW_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.MESSAGE_QUEUE_SEND(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); --XXX
+
+ end loop;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_SEND (readying)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" ); --XXX
+
+ end LOW_TASKS;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm12/tmtest.ads b/c/src/ada-tests/tmtests/tm12/tmtest.ads
new file mode 100644
index 0000000000..caeff921dd
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm12/tmtest.ads
@@ -0,0 +1,130 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 12 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:39 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the lowest priority task in the system. It
+-- only executes after all of the LOW_TASKS have blocked. It then
+-- times a readying MESSAGE_QUEUE_SEND.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure LOW_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm13/tmtest.adb b/c/src/ada-tests/tmtests/tm13/tmtest.adb
new file mode 100644
index 0000000000..c2928b96c3
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm13/tmtest.adb
@@ -0,0 +1,209 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 13 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:43 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 13 ***" );
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 251,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.TEST_INIT'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ TASK_ID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+-- As each task is started, it preempts this task and performs a blocking
+-- MESSAGE_QUEUE_RECEIVE. Upon completion of this loop all created tasks
+-- are blocked.
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ),
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_OPTIONS,
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_URGENT (preemptive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ end MIDDLE_TASKS;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm13/tmtest.ads b/c/src/ada-tests/tmtests/tm13/tmtest.ads
new file mode 100644
index 0000000000..faee6d5ad6
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm13/tmtest.ads
@@ -0,0 +1,139 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 13 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:43 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization. As each application
+-- task is created and started, it will preempt this task and
+-- perform a blocking MESSAGE_QUEUE_RECEIVE. Once all of the
+-- initialization is completed, the timer is started and the first
+-- preemptive MESSAGE_QUEUE_URGENT is executed.
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the highest priority task in the system.
+-- It performs a blocking blocking MESSAGE_QUEUE_RECEIVE. It is
+-- the last test task created and started. Thus it is the last
+-- task to be enqueued waiting for a message and the last task
+-- to receive the message. Once it receives the message, it
+-- stops the timer and reports the execution time for a
+-- preemptive MESSAGE_QUEUE_URGENT.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- As each of these RTEMS tasks is created and started, it preempts
+-- the initialization task and perform a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm14/tmtest.adb b/c/src/ada-tests/tmtests/tm14/tmtest.adb
new file mode 100644
index 0000000000..de258a995a
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm14/tmtest.adb
@@ -0,0 +1,211 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 14 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:46 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 14 ***" );
+
+ RTEMS.TASK_CREATE(
+ 1,
+ 251,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.TEST_INIT'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ TASK_ID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ),
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_OPTIONS,
+ TMTEST.QUEUE_ID,
+ STATUS
+ );
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.LOW_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.MESSAGE_QUEUE_URGENT(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ STATUS
+ );
+
+ end loop;
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_URGENT (readying)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- LOW_TASKS
+--
+
+ procedure LOW_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ end LOW_TASKS;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm14/tmtest.ads b/c/src/ada-tests/tmtests/tm14/tmtest.ads
new file mode 100644
index 0000000000..47d742c169
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm14/tmtest.ads
@@ -0,0 +1,130 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 14 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:47 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the lowest priority task in the system. It
+-- only executes after all of the LOW_TASKS have blocked. It then
+-- times a readying MESSAGE_QUEUE_SEND.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a blocking MESSAGE_QUEUE_RECEIVE.
+--
+
+ procedure LOW_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm15/tmtest.adb b/c/src/ada-tests/tmtests/tm15/tmtest.adb
new file mode 100644
index 0000000000..9749e26360
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm15/tmtest.adb
@@ -0,0 +1,276 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 15 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:49 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 15 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ ID : RTEMS.ID;
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ EVENT_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TIME_SET := FALSE;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
+ 10,
+ 1024,
+ RTEMS.NO_PREEMPT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" );
+
+ RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
+ 5,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TMTEST.HIGH_TASKS'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.PENDING_EVENTS,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_RECEIVE (current)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.ALL_EVENTS,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_RECEIVE (NO_WAIT)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
+ );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ INDEX : RTEMS.UNSIGNED32;
+ EVENT_OUT : RTEMS.EVENT_SET;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_RECEIVE (blocking)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_16, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_SEND (returns to caller)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.EVENT_SEND
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_RECEIVE (available)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.EVENT_SEND(
+ TMTEST.TASK_ID( INDEX ),
+ RTEMS.EVENT_16,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_SEND (readying)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.EVENT_SEND
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+--PAGE
+--
+-- HIGH_TASKS
+--
+
+ procedure HIGH_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ EVENT_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ if TMTEST.TIME_SET = FALSE then
+ TMTEST.TIME_SET := TRUE;
+ TIMER_DRIVER.INITIALIZE;
+ end if;
+
+ RTEMS.EVENT_RECEIVE(
+ 16#7FFFFFFF#,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+
+ end HIGH_TASKS;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm15/tmtest.ads b/c/src/ada-tests/tmtests/tm15/tmtest.ads
new file mode 100644
index 0000000000..a4d9662089
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm15/tmtest.ads
@@ -0,0 +1,147 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 15 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:50 joel Exp
+--
+
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 ..
+ TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+--
+-- This variable is set to TRUE if the timer has been initialized
+-- and is currently timing an operation.
+--
+
+ TIME_SET : RTEMS.BOOLEAN;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization. Once initialization
+-- has been completed, the following operations are timed and reported:
+--
+-- + event_receive of currently PENDING_EVENTS
+-- + event_receive NO_WAIT case
+--
+
+ procedure TEST_INIT;
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution time
+-- of a blocking EVENT_RECEIVE. After this the following
+-- operations are timed and the execution time is reported:
+--
+-- + EVENT_SEND which does not ready a task
+-- + EVENT_RECEIVE with the event condition available
+-- + EVENT_SEND which readies a task
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks executive a blocking EVENT_RECEIVE after
+-- initialization is complete. The first of these tasks to
+-- execute starts the timer.
+--
+
+ procedure HIGH_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm16/tmtest.adb b/c/src/ada-tests/tmtests/tm16/tmtest.adb
new file mode 100644
index 0000000000..5408fb84c9
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm16/tmtest.adb
@@ -0,0 +1,197 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 16 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:52 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 16 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ),
+ 251,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TEST INIT" );
+
+ RTEMS.TASK_START(
+ ID,
+ TMTEST.TEST_INIT'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TEST INIT" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PRIORITY : RTEMS.TASK_PRIORITY;
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ PRIORITY := 250;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ),
+ PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( INDEX ),
+ TASK_ENTRY,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ PRIORITY := PRIORITY - 1;
+
+ end loop;
+
+ TMTEST.TASK_COUNT := 0;
+
+ TIMER_DRIVER.INITIALIZE; -- starts the timer
+
+ RTEMS.EVENT_SEND( -- preempts task
+ TMTEST.TASK_ID( TMTEST.TASK_COUNT ),
+ RTEMS.EVENT_16,
+ STATUS
+ );
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ EVENT_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_RECEIVE( -- task blocks
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+
+ TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
+
+ RTEMS.EVENT_SEND( -- preempts task
+ TMTEST.TASK_ID( TMTEST.TASK_COUNT ),
+ RTEMS.EVENT_16,
+ STATUS
+ );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ EVENT_OUT : RTEMS.EVENT_SET;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.EVENT_RECEIVE( -- task blocks
+ RTEMS.EVENT_16,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ EVENT_OUT,
+ STATUS
+ );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_SEND (preemptive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.EVENT_SEND
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end HIGH_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm16/tmtest.ads b/c/src/ada-tests/tmtests/tm16/tmtest.ads
new file mode 100644
index 0000000000..6b801ba1be
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm16/tmtest.ads
@@ -0,0 +1,149 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 16 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:53 joel Exp
+--
+
+with RTEMS;
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+--
+-- This variable is used to index through the TASK_ID array
+-- so that events can be send to the next task.
+--
+
+ TASK_COUNT : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization. Once initialization
+-- has been completed, this task sets the TASK_COUNT to 0 and
+-- starts the timer before performing a preemptive EVENT_SEND.
+--
+
+ procedure TEST_INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is highest priority task in the system.
+-- Its first action is to perform a blocking EVENT_RECEIVE.
+-- It is the last task to have its event set sent to it. Thus it
+-- is the last task to be awakened by a preemptive EVENT_SEND.
+-- After it preempts the last MIDDLE_TASKS, it stops the timer
+-- and reports the execution time of preemptive EVENT_SEND.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a blocking EVENT_RECEIVE. When
+-- readied, each task will increment the TASK_COUNT and
+-- perform a preemptive EVENT_SEND. TASK_COUNT is used to
+-- index the TASK_ID array in such a way that incrementing
+-- TASK_COUNT makes it index the ID of the next task to
+-- send events to.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm17/tmtest.adb b/c/src/ada-tests/tmtests/tm17/tmtest.adb
new file mode 100644
index 0000000000..2d62e81da6
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm17/tmtest.adb
@@ -0,0 +1,160 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 17 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:55 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 17 ***" );
+
+ TMTEST.TASK_PRIORITY := 254;
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ TMTEST.TASK_PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.LAST_TASK'ACCESS;
+ elsif INDEX = 0 then
+ TASK_ENTRY := TMTEST.FIRST_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( TMTEST.TASK_ID( INDEX ), TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ TMTEST.TASK_COUNT := 1;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- FIRST_TASK
+--
+
+ procedure FIRST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+
+ TMTEST.TASK_PRIORITY := TMTEST.TASK_PRIORITY - 1;
+ TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
+
+ RTEMS.TASK_SET_PRIORITY(
+ TMTEST.TASK_ID( TMTEST.TASK_COUNT ),
+ TMTEST.TASK_PRIORITY,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+
+ end FIRST_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_PRIORITY := TMTEST.TASK_PRIORITY - 1;
+ TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
+
+ RTEMS.TASK_SET_PRIORITY(
+ TMTEST.TASK_ID( TMTEST.TASK_COUNT ),
+ TMTEST.TASK_PRIORITY,
+ PREVIOUS_PRIORITY,
+ STATUS
+ );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LAST_TASK
+--
+
+ procedure LAST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SET_PRIORITY (preemptive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LAST_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm17/tmtest.ads b/c/src/ada-tests/tmtests/tm17/tmtest.ads
new file mode 100644
index 0000000000..733b6ee32e
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm17/tmtest.ads
@@ -0,0 +1,147 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 17 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:56 joel Exp
+--
+
+with RTEMS;
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.NAME;
+
+--
+-- These variables are used to index the TASK_ID array and change
+-- the priority of each successive task such that the TASK_SET_PRIORITY
+-- results in a preemption.
+--
+
+ TASK_COUNT : RTEMS.UNSIGNED32;
+ TASK_PRIORITY : RTEMS.TASK_PRIORITY;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- FIRST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the first task to execute in the system. It
+-- starts the timer and updates the TASK_COUNT and TASK_PRIORITY
+-- variables so that a preemptive TASK_SET_PRIORITY can be performed.
+--
+
+ procedure FIRST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASK
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks update the TASK_COUNT and TASK_PRIORITY variables
+-- so that a preemptive TASK_SET_PRIORITY can be performed.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LAST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the last task to execute in the system. It
+-- stops the timer and reports the execution time of a preemptive
+-- TASK_SET_PRIORITY.
+--
+
+ procedure LAST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm18/tmtest.adb b/c/src/ada-tests/tmtests/tm18/tmtest.adb
new file mode 100644
index 0000000000..bd28b1d0d4
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm18/tmtest.adb
@@ -0,0 +1,154 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 18 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:43:58 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 18 ***" );
+
+ TMTEST.TEST_INIT;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_INIT
+--
+
+ procedure TEST_INIT
+ is
+ ID : RTEMS.ID;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+
+ if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.LAST_TASK'ACCESS;
+ elsif INDEX = 0 then
+ TASK_ENTRY := TMTEST.FIRST_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ end TEST_INIT;
+
+--PAGE
+--
+-- FIRST_TASK
+--
+
+ procedure FIRST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+
+ end FIRST_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LAST_TASK
+--
+
+ procedure LAST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_DELETE (self)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_DELETE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LAST_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm18/tmtest.ads b/c/src/ada-tests/tmtests/tm18/tmtest.ads
new file mode 100644
index 0000000000..27568738f5
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm18/tmtest.ads
@@ -0,0 +1,135 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 18 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:43:59 joel Exp
+--
+
+with RTEMS;
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+
+package TMTEST is
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_INIT
+--
+-- DESCRIPTION:
+--
+-- This subprogram performs test initialization.
+--
+
+ procedure TEST_INIT;
+
+--
+-- FIRST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the first task to execute. It starts the
+-- timer and performs a TASK_DELETE on itself.
+--
+
+ procedure FIRST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASK
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a TASK_DELETE on themselves.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LAST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the last task to execute. It stops the
+-- timer and reports the execution time of a TASK_DELETE SELF.
+--
+
+ procedure LAST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm19/tmtest.adb b/c/src/ada-tests/tmtests/tm19/tmtest.adb
new file mode 100644
index 0000000000..bb47514a25
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm19/tmtest.adb
@@ -0,0 +1,287 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 19 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:01 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 19 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 127,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 2 ),
+ TMTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 126,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 3 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK3" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 3 ),
+ TMTEST.TASK_3'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK3" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- PROCESS_ASR_FOR_PASS_1
+--
+
+ procedure PROCESS_ASR_FOR_PASS_1 (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_SEND (self)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SIGNAL_SEND
+ );
+
+ TEXT_IO.PUT_LINE( "SIGNAL_ENTER (preemptive) na" );
+
+ TIMER_DRIVER.INITIALIZE;
+
+ end PROCESS_ASR_FOR_PASS_1;
+
+--PAGE
+--
+-- PROCESS_ASR_FOR_PASS_2
+--
+
+ procedure PROCESS_ASR_FOR_PASS_2 (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.PUT_LINE( "SIGNAL_ENTER (preemptive) na" );
+
+ RTEMS.TASK_RESUME( TMTEST.TASK_ID( 3 ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
+
+ TIMER_DRIVER.INITIALIZE;
+
+ end PROCESS_ASR_FOR_PASS_2;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.SIGNAL_CATCH(
+ TMTEST.PROCESS_ASR_FOR_PASS_1'ACCESS,
+ RTEMS.DEFAULT_MODES,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_CATCH",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SIGNAL_CATCH
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.SIGNAL_SEND( TMTEST.TASK_ID( 2 ), RTEMS.SIGNAL_1, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_SEND (non-preemptive)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.SIGNAL_SEND
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
+
+ -- end time is done in ASR
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_RETURN (non-preemptive)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ RTEMS.SIGNAL_CATCH(
+ TMTEST.PROCESS_ASR_FOR_PASS_2'ACCESS,
+ RTEMS.NO_PREEMPT,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
+
+ end TASK_1;
+
+--PAGE
+--
+-- PROCESS_ASR_FOR_TASK_2
+--
+
+ procedure PROCESS_ASR_FOR_TASK_2 (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ NULL;
+
+ end PROCESS_ASR_FOR_TASK_2;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SIGNAL_CATCH(
+ TMTEST.PROCESS_ASR_FOR_TASK_2'ACCESS,
+ RTEMS.DEFAULT_MODES,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+ end TASK_2;
+
+--PAGE
+--
+-- TASK_3
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_RETURN (preemptive)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_3;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm19/tmtest.ads b/c/src/ada-tests/tmtests/tm19/tmtest.ads
new file mode 100644
index 0000000000..d229734780
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm19/tmtest.ads
@@ -0,0 +1,182 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 19 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:02 joel Exp
+--
+
+with RTEMS;
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PROCESS_ASR_FOR_PASS_1
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the ASR used to measure and report the
+-- execution time of a SIGNAL_SEND to SELF. Before it exits
+-- it starts the timer so that the execution time required to
+-- exit from an ASR back to the same task can be measured.
+--
+
+ procedure PROCESS_ASR_FOR_PASS_1 (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- PROCESS_ASR_FOR_PASS_2
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the ASR which sets up for a preemptive
+-- return from an ASR. Before it exits it starts the timer
+-- so that the execution time required to exit from an ASR
+-- and transfer control to the another task can be measured.
+--
+
+ procedure PROCESS_ASR_FOR_PASS_2 (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting
+-- the following execution times:
+--
+-- + SIGNAL_CATCH
+-- + non-preemptive SIGNAL_SEND
+-- + non-preemptive return from an ASR
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PROCESS_ASR_FOR_TASK_2
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the ASR for TASK_2. It performs no actions.
+--
+
+ procedure PROCESS_ASR_FOR_TASK_2 (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is used as the recipient of a SIGNAL_SEND.
+-- After establishing an ASR, it suspends itself to insure
+-- that it does not execute again.
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_3
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is used as the recipient of a preemptive
+-- SIGNAL_SEND. This task suspends itself and is resumed by
+-- an ASR for TASK_1. Once the task executes, it stops the
+-- timer and reports the execution time for a preemptive
+-- return from an ASR.
+--
+
+ procedure TASK_3 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 100, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm20/tmtest.adb b/c/src/ada-tests/tmtests/tm20/tmtest.adb
new file mode 100644
index 0000000000..909d340f99
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm20/tmtest.adb
@@ -0,0 +1,588 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 20 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:04 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 20 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', '1' ),
+ 128,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', '2' ),
+ 129,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 2 ),
+ TMTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER_COUNT : RTEMS.UNSIGNED32;
+ INDEX : RTEMS.UNSIGNED32;
+ PREVIOUS_MODE : RTEMS.MODE;
+ PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+ RETURN_VALUE : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.PARTITION_NAME := RTEMS.BUILD_NAME( 'P', 'A', 'R', 'T' );
+
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.PARTITION_CREATE(
+ TMTEST.PARTITION_NAME,
+ TMTEST.PARTITION_AREA'ADDRESS,
+ 2048,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.PARTITION_ID,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_CREATE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.PARTITION_CREATE
+ );
+
+ TMTEST.REGION_NAME := RTEMS.BUILD_NAME( 'R', 'E', 'G', 'N' );
+
+ TIMER_DRIVER.INITIALIZE;
+
+ RTEMS.REGION_CREATE(
+ TMTEST.REGION_NAME,
+ TMTEST.REGION_AREA'ADDRESS,
+ 2048,
+ 16,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.REGION_ID,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_CREATE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_CREATE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.PARTITION_GET_BUFFER(
+ TMTEST.PARTITION_ID,
+ TMTEST.BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_GET_BUFFER (available)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER
+ );
+
+ BUFFER_COUNT := 0;
+ loop
+
+ RTEMS.PARTITION_GET_BUFFER(
+ TMTEST.PARTITION_ID,
+ TMTEST.BUFFER_ADDRESSES( BUFFER_COUNT ),
+ STATUS
+ );
+
+ exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED );
+
+ BUFFER_COUNT := BUFFER_COUNT + 1;
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.PARTITION_GET_BUFFER(
+ TMTEST.PARTITION_ID,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_GET_BUFFER (not available)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.PARTITION_RETURN_BUFFER(
+ TMTEST.PARTITION_ID,
+ TMTEST.BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_RETURN_BUFFER",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.PARTITION_RETURN_BUFFER
+ );
+
+ for INDEX in 0 .. BUFFER_COUNT - 1
+ loop
+
+ RTEMS.PARTITION_RETURN_BUFFER(
+ TMTEST.PARTITION_ID,
+ TMTEST.BUFFER_ADDRESSES( INDEX ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.PARTITION_DELETE( TMTEST.PARTITION_ID, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_DELETE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.PARTITION_DELETE
+ );
+
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 400,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 400,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_3,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_GET_SEGMENT (available)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 1998,
+ RTEMS.NO_WAIT,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_4,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_GET_SEGMENT (NO_WAIT)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
+ );
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ TMTEST.REGION_ID,
+ TMTEST.BUFFER_ADDRESS_3,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_RETURN_SEGMENT(
+ TMTEST.REGION_ID,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_RETURN_SEGMENT (no tasks waiting)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
+ );
+
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 400,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 1998,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+
+ -- execute TASK_2
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_RETURN_SEGMENT (preempt)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
+ );
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ TMTEST.REGION_ID,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+
+ RTEMS.TASK_MODE(
+ RTEMS.NO_PREEMPT,
+ RTEMS.PREEMPT_MASK,
+ PREVIOUS_MODE,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+ RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, PREVIOUS_PRIORITY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 400,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_1,
+ STATUS
+ );
+
+ RTEMS.REGION_GET_SEGMENT(
+ TMTEST.REGION_ID,
+ 1998,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.NO_TIMEOUT,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+
+ -- execute TASK_2
+
+ RTEMS.REGION_RETURN_SEGMENT(
+ TMTEST.REGION_ID,
+ TMTEST.BUFFER_ADDRESS_2,
+ STATUS
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_DELETE( TMTEST.REGION_ID, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_DELETE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_DELETE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.IO_INITIALIZE(
+ 1,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_INITIALIZE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.IO_INITIALIZE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.IO_OPEN(
+ 1,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_OPEN",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.IO_OPEN
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.IO_CLOSE(
+ 1,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_CLOSE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.IO_CLOSE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.IO_READ(
+ 1,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_READ",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.IO_READ
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.IO_WRITE(
+ 1,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_WRITE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.IO_WRITE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.IO_CONTROL(
+ 1,
+ 0,
+ RTEMS.NULL_ADDRESS,
+ RETURN_VALUE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_CONTROL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.IO_CONTROL
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_GET_SEGMENT (blocking)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_RETURN_SEGMENT(
+ TMTEST.REGION_ID,
+ TMTEST.BUFFER_ADDRESS_1,
+ STATUS
+ );
+
+ -- preempt back to TASK_1
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.REGION_RETURN_SEGMENT(
+ TMTEST.REGION_ID,
+ TMTEST.BUFFER_ADDRESS_1,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_RETURN_SEGMENT (ready -- return)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
+ );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end TASK_2;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm20/tmtest.ads b/c/src/ada-tests/tmtests/tm20/tmtest.ads
new file mode 100644
index 0000000000..649b1a3159
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm20/tmtest.ads
@@ -0,0 +1,206 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 20 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:05 joel Exp
+--
+
+with STUB_DRIVER;
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- These following are the ID and NAME of the RTEMS partition created
+-- by this test.
+--
+
+ PARTITION_ID : RTEMS.ID;
+ PARTITION_NAME : RTEMS.NAME;
+
+--
+-- These following are the ID and NAME of the RTEMS region created
+-- by this test.
+--
+
+ REGION_ID : RTEMS.ID;
+ REGION_NAME : RTEMS.NAME;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a partition.
+--
+
+ PARTITION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 )
+ of RTEMS.UNSIGNED8;
+ for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a region.
+--
+
+ REGION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 )
+ of RTEMS.UNSIGNED8;
+
+ for REGION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- The following are the buffers allocated from the region.
+--
+
+ BUFFER_ADDRESS_1 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_2 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_3 : RTEMS.ADDRESS;
+ BUFFER_ADDRESS_4 : RTEMS.ADDRESS;
+
+ BUFFER_ADDRESSES : array ( RTEMS.UNSIGNED32
+ range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ADDRESS;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting
+-- the following execution times:
+--
+-- + PARTITION_CREATE
+-- + REGION_CREATE
+-- + PARTITION_GET_BUFFER with a buffer available
+-- + PARTITION_GET_BUFFER with no buffers available
+-- + PARTITION_RETURN_BUFFER
+-- + PARTITION_DELETE
+-- + REGION_GET_SEGMENT with a segment available
+-- + REGION_GET_SEGMENT with the NO_WAIT option
+-- + REGION_RETURN_SEGMENT with no tasks waiting for memory
+-- + REGION_RETURN_SEGMENT preemptive
+-- + REGION_DELETE
+-- + IO_INITIALIZE
+-- + IO_OPEN
+-- + IO_CLOSE
+-- + IO_READ
+-- + IO_WRITE
+-- + IO_CONTROL
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting
+-- the following execution times:
+--
+-- + blocking REGION_GET_SEGMENT
+-- + REGION_RETURN_SEGMENT which readies a task
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Driver Address Table for this test.
+--
+
+ DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+ ( 1 =>
+ (
+ STUB_DRIVER.INITIALIZE'ACCESS, -- Initialization
+ STUB_DRIVER.OPEN'ACCESS, -- Open
+ STUB_DRIVER.CLOSE'ACCESS, -- Close
+ STUB_DRIVER.READ'ACCESS, -- Read
+ STUB_DRIVER.WRITE'ACCESS, -- Write
+ STUB_DRIVER.CONTROL'ACCESS -- Control
+ )
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 10, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 1, -- maximum # partitions
+ 1, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm21/tmtest.adb b/c/src/ada-tests/tmtests/tm21/tmtest.adb
new file mode 100644
index 0000000000..2f9847398b
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm21/tmtest.adb
@@ -0,0 +1,300 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 21 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:07 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 21 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 250,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE TASK_1" );
+
+ RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START TASK1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ ID : RTEMS.ID;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ INDEX,
+ 254,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ INDEX,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ INDEX,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
+
+ RTEMS.REGION_CREATE(
+ INDEX,
+ TMTEST.REGION_AREA'ADDRESS,
+ 2048,
+ 16,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE" );
+
+ RTEMS.PARTITION_CREATE(
+ INDEX,
+ TMTEST.PARTITION_AREA'ADDRESS,
+ 2048,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
+
+ RTEMS.PORT_CREATE(
+ INDEX,
+ TMTEST.INTERNAL_PORT_AREA'ADDRESS,
+ TMTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ 16#FF#,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_CREATE" );
+
+ RTEMS.TIMER_CREATE( INDEX, ID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ RTEMS.RATE_MONOTONIC_CREATE( INDEX, ID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_IDENT( INDEX, RTEMS.SEARCH_ALL_NODES, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_IDENT(
+ INDEX,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.SEMAPHORE_IDENT(
+ INDEX,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.SEMAPHORE_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.PARTITION_IDENT(
+ INDEX,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.PARTITION_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.REGION_IDENT( INDEX, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.REGION_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.PORT_IDENT( INDEX, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.PORT_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_IDENT( INDEX, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TIMER_IDENT
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.RATE_MONOTONIC_IDENT( INDEX, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_IDENT
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm21/tmtest.ads b/c/src/ada-tests/tmtests/tm21/tmtest.ads
new file mode 100644
index 0000000000..c9998c4ad4
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm21/tmtest.ads
@@ -0,0 +1,160 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 21 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:08 joel Exp
+--
+
+with RTEMS;
+with SYSTEM;
+with TIMER_DRIVER;
+with System.Storage_Elements;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- The following area defines a memory area to be used as the
+-- internal address space of the port.
+--
+
+ INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00001000#);
+
+ INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- external address space of the port.
+--
+
+ EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00002000#);
+
+ EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a partition.
+--
+
+ PARTITION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 )
+ of RTEMS.UNSIGNED8;
+ for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- These following are the ID and NAME of the RTEMS region created
+-- by this test.
+--
+
+ REGION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 )
+ of RTEMS.UNSIGNED8;
+ for REGION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + TASK_IDENT
+-- + MESSAGE_QUEUE_IDENT
+-- + SEMAPHORE_IDENT
+-- + PARTITION_IDENT
+-- + REGION_IDENT
+-- + PORT_IDENT
+-- + TIMER_IDENT
+-- + RATE_MONOTONIC_IDENT
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 102, -- maximum # tasks
+ 100, -- maximum # timers
+ 100, -- maximum # semaphores
+ 100, -- maximum # message queues
+ 5, -- maximum # messages
+ 100, -- maximum # partitions
+ 100, -- maximum # regions
+ 100, -- maximum # dp memory areas
+ 100, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm22/tmtest.adb b/c/src/ada-tests/tmtests/tm22/tmtest.adb
new file mode 100644
index 0000000000..721fbb8a59
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm22/tmtest.adb
@@ -0,0 +1,249 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 22 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:10 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 22 ***" );
+
+ RTEMS.MESSAGE_QUEUE_CREATE(
+ RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.MESSAGE_QUEUE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
+ 10,
+ 2048,
+ RTEMS.NO_PREEMPT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" );
+
+ RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'P', 'R', 'M', 'T' ),
+ 11,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE PREEMPT" );
+
+ RTEMS.TASK_START( ID, TMTEST.PREEMPT_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START PREEMPT" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_BROADCAST(
+ TMTEST.MESSAGE_QUEUE_ID,
+ BUFFER_POINTER,
+ COUNT,
+ STATUS
+ );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_BROADCAST (readying)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_BROADCAST
+ );
+
+ RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
+ 5,
+ 2048,
+ RTEMS.NO_PREEMPT,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" );
+
+ RTEMS.TASK_START( ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.MESSAGE_QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.MESSAGE_QUEUE_BROADCAST(
+ TMTEST.MESSAGE_QUEUE_ID,
+ BUFFER_POINTER,
+ COUNT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_BROADCAST (no waiting tasks)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_BROADCAST
+ );
+
+ RTEMS.MESSAGE_QUEUE_RECEIVE(
+ TMTEST.MESSAGE_QUEUE_ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.NO_TIMEOUT,
+ STATUS
+ );
+
+ -- should go to PREEMPT_TASK here
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_BROADCAST (preempt)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_BROADCAST
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure PREEMPT_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ COUNT : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.MESSAGE_QUEUE_BROADCAST(
+ TMTEST.MESSAGE_QUEUE_ID,
+ BUFFER_POINTER,
+ COUNT,
+ STATUS
+ );
+
+ -- should be preempted by LOW_TASK
+
+ end PREEMPT_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm22/tmtest.ads b/c/src/ada-tests/tmtests/tm22/tmtest.ads
new file mode 100644
index 0000000000..d98d0eeeba
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm22/tmtest.ads
@@ -0,0 +1,144 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 22 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:11 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the message queue used for timing operations.
+--
+
+ MESSAGE_QUEUE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is created by LOW_TASK and executes after
+-- LOW_TASK has performed a blocking MESSAGE_QUEUE_RECEIVE.
+-- This task then executes and performs a readying
+-- MESSAGE_QUEUE_BROADCAST and reports its execution time.
+-- Finally, the task suspends itself so LOW_TASK can continue
+-- execution.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task performs a blocking MESSAGE_QUEUE_RECEIVE
+-- so that when HIGH_TASK performs a MESSAGE_QUEUE_BROADCAST,
+-- there will be a task to be readied. Following this, the
+-- execution time for a MESSAGE_QUEUE_BROADCAST to a message
+-- queue with no waiting tasks is measured and reported.
+-- Then this task performs another blocking MESSAGE_QUEUE_RECEIVE
+-- so that when PREEMPT_TASK performs a MESSAGE_QUEUE_BROADCAST,
+-- PREEMPT_TASK will be preempted by this task. After control
+-- of the processor is transferred back to this task by the
+-- preemption, the timer is stopped and the execution time of
+-- a preemptive MESSAGE_QUEUE_BROADCAST is reported.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- PREEMPT_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task starts the timer and performs a preemptive
+-- MESSAGE_QUEUE_BROADCAST.
+--
+
+ procedure PREEMPT_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 103, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 1, -- maximum # message queues
+ 101, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm23/tmtest.adb b/c/src/ada-tests/tmtests/tm23/tmtest.adb
new file mode 100644
index 0000000000..f596127e63
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm23/tmtest.adb
@@ -0,0 +1,399 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 23 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:14 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ OVERHEAD : RTEMS.UNSIGNED32;
+ TASK_PRIORITY : RTEMS.TASK_PRIORITY;
+ INDEX : RTEMS.UNSIGNED32;
+ ID : RTEMS.ID;
+ TASK_ENTRY : RTEMS.TASK_ENTRY_POINT;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 23 ***" );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TASK_PRIORITY := 5;
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ TASK_PRIORITY,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ if INDEX = 1 then
+ TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
+ elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TASK_ENTRY := TMTEST.LOW_TASK'ACCESS;
+ else
+ TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
+ end if;
+
+ RTEMS.TASK_START( ID, TASK_ENTRY, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ TASK_PRIORITY := TASK_PRIORITY + 1;
+
+ end loop;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- NULL_DELAY
+--
+
+ procedure NULL_DELAY (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ NULL;
+
+ end NULL_DELAY;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.TASK_PRIORITY;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_CREATE(
+ INDEX,
+ TMTEST.TIMER_ID( INDEX ),
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_CREATE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_FIRE_AFTER(
+ TMTEST.TIMER_ID( INDEX ),
+ 500,
+ TMTEST.NULL_DELAY'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_FIRE_AFTER (inactive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_FIRE_AFTER(
+ TMTEST.TIMER_ID( INDEX ),
+ 500,
+ TMTEST.NULL_DELAY'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_FIRE_AFTER (active)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_CANCEL (active)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_CANCEL
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_CANCEL (inactive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_CANCEL
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_RESET( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_RESET (inactive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_RESET
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_RESET( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_RESET (active)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_RESET
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+
+ TMTEST.TIME_OF_DAY := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+ RTEMS.CLOCK_SET( TMTEST.TIME_OF_DAY, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+ TMTEST.TIME_OF_DAY.YEAR := 1989;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_FIRE_WHEN(
+ TMTEST.TIMER_ID( INDEX ),
+ TMTEST.TIME_OF_DAY,
+ TMTEST.NULL_DELAY'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_FIRE_WHEN (inactive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_FIRE_WHEN(
+ TMTEST.TIMER_ID( INDEX ),
+ TMTEST.TIME_OF_DAY,
+ TMTEST.NULL_DELAY'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_FIRE_WHEN (active)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_DELETE( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_DELETE (active)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_DELETE
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_CREATE( INDEX, TMTEST.TIMER_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+
+ RTEMS.TIMER_FIRE_AFTER(
+ TMTEST.TIMER_ID( INDEX ),
+ 500,
+ TMTEST.NULL_DELAY'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+ RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+ end loop;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TIMER_DELETE( TMTEST.TIMER_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_DELETE (inactive)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TIMER_DELETE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.TASK_WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- MIDDLE_TASKS
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.TASK_WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS );
+
+ end MIDDLE_TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_WAKE_WHEN",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.TASK_WAKE_WHEN
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm23/tmtest.ads b/c/src/ada-tests/tmtests/tm23/tmtest.ads
new file mode 100644
index 0000000000..5fe500e485
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm23/tmtest.ads
@@ -0,0 +1,168 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 23 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:15 joel Exp
+--
+
+with TIMER_DRIVER;
+with TIME_TEST_SUPPORT;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS timers created by this test.
+--
+
+ TIMER_ID : array ( RTEMS.UNSIGNED32
+ range 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+--
+-- This data item contains a time of day used by all of the
+-- "WHEN" directives timed in this test.
+--
+
+ TIME_OF_DAY : RTEMS.TIME_OF_DAY;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- NULL_DELAY
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a timer service routine. It performs
+-- no actions.
+--
+
+ procedure NULL_DELAY (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting
+-- the following directive execution times:
+--
+-- + TIMER_CREATE
+-- + TIMER_FIRE_AFTER with an inactive timer
+-- + TIMER_FIRE_AFTER with an active timer
+-- + TIMER_CANCEL of an active timer
+-- + TIMER_CANCEL of an inactive timer
+-- + TIMER_RESET of an active timer
+-- + TIMER_RESET of an inactive timer
+-- + TIMER_FIRE_WHEN of an inactive timer
+-- + TIMER_FIRE_WHEN of an active timer
+-- + TIMER_DELETE of an active timer
+-- + TIMER_DELETE of an inactive timer
+--
+-- After measuring and reporting the above times, this task starts
+-- the timer and executes the TASK_WAKE_WHEN directive.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks executes the TASK_WAKE_WHEN directive.
+--
+
+ procedure MIDDLE_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASKS
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution time for
+-- the TASK_WAKE_WHEN directive.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 110, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm24/tmtest.adb b/c/src/ada-tests/tmtests/tm24/tmtest.adb
new file mode 100644
index 0000000000..2581a3629a
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm24/tmtest.adb
@@ -0,0 +1,165 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 24 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:18 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 24 ***" );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ TMTEST.OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
+ 10,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" );
+
+ RTEMS.TASK_START( ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'R', 'E', 'S', 'T' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START( ID, TMTEST.TASKS'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- HIGH_TASK
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_WAKE_AFTER (no context switch)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ TMTEST.OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_WAKE_AFTER
+ );
+
+ TMTEST.TASK_COUNT := 0;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end HIGH_TASK;
+
+--PAGE
+--
+-- TASKS
+--
+
+ procedure TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
+
+ if TMTEST.TASK_COUNT = 1 then
+
+ TIMER_DRIVER.INITIALIZE;
+
+ elsif TMTEST.TASK_COUNT = TIME_TEST_SUPPORT.OPERATION_COUNT then
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_WAKE_AFTER (context switch)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ TMTEST.OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.TASK_WAKE_AFTER
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end if;
+
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+
+ end TASKS;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm24/tmtest.ads b/c/src/ada-tests/tmtests/tm24/tmtest.ads
new file mode 100644
index 0000000000..0beebbb2d9
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm24/tmtest.ads
@@ -0,0 +1,137 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 24 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:19 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- This variable is used to determine which task should
+-- start the timer and which task should stop the timer
+-- and report the execution time.
+--
+
+ TASK_COUNT : RTEMS.UNSIGNED32;
+
+--
+-- This variable contains the execution time required of the
+-- loop used to execute the directive.
+--
+
+ OVERHEAD : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- execution time for an invocation of TASK_WAKE_AFTER which
+-- attempts to yield but does not result in a context switch.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks are responsible for measuring and reporting the
+-- execution time for an invocation of TASK_WAKE_AFTER which
+-- attempts to yield but does result in a context switch.
+--
+
+ procedure TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm25/tmtest.adb b/c/src/ada-tests/tmtests/tm25/tmtest.adb
new file mode 100644
index 0000000000..b819eaa214
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm25/tmtest.adb
@@ -0,0 +1,156 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 25 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:22 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 25 ***" );
+
+ RTEMS.SEMAPHORE_CREATE(
+ RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ),
+ 0,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.SEMAPHORE_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
+ 254,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" );
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.LOW_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TASK_ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START(
+ TASK_ID,
+ TMTEST.HIGH_TASKS'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- HIGH_TASKS
+--
+
+ procedure HIGH_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.SEMAPHORE_OBTAIN(
+ TMTEST.SEMAPHORE_ID,
+ RTEMS.DEFAULT_OPTIONS,
+ RTEMS.INTERVAL'LAST,
+ STATUS
+ );
+
+ end HIGH_TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.CLOCK_TICK( STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "CLOCK_TICK",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ 0,
+ RTEMS_CALLING_OVERHEAD.CLOCK_TICK
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm25/tmtest.ads b/c/src/ada-tests/tmtests/tm25/tmtest.ads
new file mode 100644
index 0000000000..4c2184f0fa
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm25/tmtest.ads
@@ -0,0 +1,118 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 25 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:23 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the ID of the semaphore used for timing operations.
+--
+
+ SEMAPHORE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASKS
+--
+-- DESCRIPTION:
+--
+-- These RTEMS tasks perform a blocking SEMAPHORE_OBTAIN which
+-- has an optional timeout.
+--
+
+ procedure HIGH_TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting
+-- the execution time for the CLOCK_TICK directive.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm26/tmtest.ads b/c/src/ada-tests/tmtests/tm26/tmtest.ads
new file mode 100644
index 0000000000..6d9fb0ddd8
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm26/tmtest.ads
@@ -0,0 +1,227 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 26 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:27 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This points to the RTEMS task control block for the MIDDLE_TASK.
+--
+
+ MIDDLE_TCB : RTEMS.TCB_POINTER;
+
+--
+-- The following is the ID of the semaphore used for timing operations.
+--
+
+ SEMAPHORE_ID : RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- NULL_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task has a NULL body and is only included to
+-- allow TASK_START to be invoked without impacting another
+-- task.
+--
+
+ procedure NULL_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- HIGH_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is the highest priority test task and
+-- thus executes first. It is responsible for measuring
+-- and reporting the following times:
+--
+-- + THREAD_DISABLE_DISPATCH
+-- + THREAD_ENABLE_DISPATCH
+-- + THREAD_SET_STATE
+--
+-- After measuring and reporting the above times, this task
+-- starts the timer and forces dispatch to the MIDDLE_TASK.
+--
+
+ procedure HIGH_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- MIDDLE_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution
+-- time for THREAD_DISPATCH without any floating point context
+-- save and restore involved. Following this, it starts the
+-- timer and forces a CONTEXT_SWITCH to the LOW_TASK.
+--
+
+ procedure MIDDLE_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- LOW_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution
+-- time for a raw CONTEXT_SWITCH without any floating point context
+-- save and restore involved. Following this, it starts the
+-- timer and performs a CONTEXT_RESTORE_FP for the FLOATING_POINT_TASK_1
+-- and a CONTEXT_SWITCH to FLOATING_POINT_TASK_1.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- FLOATING_POINT_TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution
+-- time for a CONTEXT_SWITCH which restores the first floating
+-- point context. Following this, it starts the
+-- timer and performs a CONTEXT_SAVE_FP and CONTEXT_RESTORE_FP
+-- and a CONTEXT_SWITCH to FLOATING_POINT_TASK_2. Once
+-- control is returned to this task FLOATING_POINT_TASK_2, the
+-- timer is stopped and the execution time for CONTEXT_SWITCH
+-- from a used to an initialized floating point context is reported.
+-- Following this, it starts the timer and performs a
+-- CONTEXT_SAVE_FP and CONTEXT_RESTORE_FP and a CONTEXT_SWITCH
+-- to FLOATING_POINT_TASK_2.
+--
+
+ procedure FLOATING_POINT_TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- FLOATING_POINT_TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution
+-- time for a CONTEXT_SWITCH which switches from one freshly
+-- initialized floating point context to another freshly
+-- initialized floating point context. Following this, it
+-- "dirties" its floating point context and starts the
+-- timer. After this it performs a CONTEXT_SAVE_FP and
+-- CONTEXT_RESTORE_FP and a CONTEXT_SWITCH to FLOATING_POINT_TASK_1.
+-- Once control is returned to this task FLOATING_POINT_TASK_2, the
+-- timer is stopped and the execution time for CONTEXT_SWITCH
+-- from one used floating point context to another used floating
+-- point context is reported. After this, this task invokes
+-- the COMPLETE_TEST subprogram to measure and report
+-- the remaining execution times measured by this test.
+--
+
+ procedure FLOATING_POINT_TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- COMPLETE_TEST
+--
+-- DESCRIPTION:
+--
+-- This subprogram is responsible for measuring and reporting the
+-- following execution times:
+--
+-- + THREAD_RESUME
+-- + THREAD_UNBLOCK
+-- + THREAD_READY
+-- + THREAD_GET with a valid id
+-- + THREAD_GET with an invalid id
+--
+
+ procedure COMPLETE_TEST;
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm27/tmtest.adb b/c/src/ada-tests/tmtests/tm27/tmtest.adb
new file mode 100644
index 0000000000..d43cc15db4
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm27/tmtest.adb
@@ -0,0 +1,268 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 27 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:29 joel Exp
+--
+
+with INTERRUPT_TIME_TEST_SUPPORT;
+with INTERFACES; use INTERFACES;
+with RTEMS_CALLING_OVERHEAD;
+with RTEMS;
+with RTEMS_TEST_SUPPORT;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 27 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ),
+ 254,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE TASK_1" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START TASK_1" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' ),
+ 254,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 2 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE TASK_2" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 2 ),
+ TMTEST.TASK_2'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START TASK_2" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ RTEMS_TEST_SUPPORT.THREAD_DISPATCH_DISABLE_LEVEL := 1;
+
+ TMTEST.INTERRUPT_NEST := 1;
+
+ INTERRUPT_TIME_TEST_SUPPORT.INSTALL_HANDLER(
+ TMTEST.ISR_HANDLER'ADDRESS
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT;
+ -- goes to ISR_HANDLER
+
+ TMTEST.INTERRUPT_RETURN_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_ENTER (nested interrupt)",
+ TMTEST.INTERRUPT_ENTER_NESTED_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_RETURN (nested interrupt)",
+ TMTEST.INTERRUPT_RETURN_NESTED_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TMTEST.INTERRUPT_NEST := 0;
+
+ RTEMS_TEST_SUPPORT.THREAD_DISPATCH_DISABLE_LEVEL := 0;
+
+ TIMER_DRIVER.INITIALIZE;
+ INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT;
+ -- goes to ISR_HANDLER
+
+ TMTEST.INTERRUPT_RETURN_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_ENTER (no preempt)",
+ TMTEST.INTERRUPT_ENTER_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_RETURN (no preempt)",
+ TMTEST.INTERRUPT_RETURN_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ RTEMS_TEST_SUPPORT.THREAD_DISPATCH_DISABLE_LEVEL := 0;
+
+ RTEMS_TEST_SUPPORT.THREAD_HEIR :=
+ RTEMS_TEST_SUPPORT.THREAD_TO_CONTROL_POINTER(
+ RTEMS_TEST_SUPPORT.CHAIN_NODE_POINTER_TO_ADDRESS(
+ RTEMS_TEST_SUPPORT.THREAD_READY_CHAIN( 254 ).LAST
+ )
+ );
+
+ RTEMS_TEST_SUPPORT.CONTEXT_SWITCH_NECESSARY := TRUE;
+
+ TIMER_DRIVER.INITIALIZE;
+ INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT;
+ -- goes to ISR_HANDLER
+
+ end TASK_1;
+
+--PAGE
+--
+-- TASK_2
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ begin
+
+ TMTEST.INTERRUPT_RETURN_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_ENTER (preempt)",
+ TMTEST.INTERRUPT_ENTER_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_RETURN (preempt)",
+ TMTEST.INTERRUPT_RETURN_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_2;
+
+--PAGE
+--
+-- ISR_HANDLER
+--
+
+--
+-- The ISR_HANDLER and ISR_HANDLER_INNER subprograms are structured
+-- so that there will be as little entry overhead as possible included
+-- in the interrupt entry time.
+--
+
+ procedure ISR_HANDLER (
+ VECTOR : in RTEMS.VECTOR_NUMBER
+ ) is
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TMTEST.ISR_HANDLER_INNER;
+
+ end ISR_HANDLER;
+
+--
+-- ISR_HANDLER_INNER
+--
+
+ procedure ISR_HANDLER_INNER
+ is
+ begin
+
+ -- enable tracing here is necessary
+
+ INTERRUPT_TIME_TEST_SUPPORT.CLEAR_INTERRUPT;
+
+ case TMTEST.INTERRUPT_NEST is
+ when 0 =>
+ TMTEST.INTERRUPT_ENTER_TIME := TMTEST.END_TIME;
+
+ when 1 =>
+ TMTEST.INTERRUPT_ENTER_TIME := TMTEST.END_TIME;
+ TMTEST.INTERRUPT_NEST := 2;
+ TIMER_DRIVER.INITIALIZE;
+ INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT;
+ -- goes to a nested copy of ISR_HANDLER
+
+ TMTEST.INTERRUPT_RETURN_NESTED_TIME := TIMER_DRIVER.READ_TIMER;
+
+ when 2 =>
+ TMTEST.INTERRUPT_ENTER_NESTED_TIME := TMTEST.END_TIME;
+
+ when others =>
+ NULL;
+
+ end case;
+
+ -- Start the timer so interrupt return times can be measured
+
+ TIMER_DRIVER.INITIALIZE;
+
+ end ISR_HANDLER_INNER;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm27/tmtest.ads b/c/src/ada-tests/tmtests/tm27/tmtest.ads
new file mode 100644
index 0000000000..4911cd8c99
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm27/tmtest.ads
@@ -0,0 +1,169 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 27 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:30 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- The following variable indicates which interrupt case is
+-- currently being timed.
+--
+
+ INTERRUPT_NEST : RTEMS.UNSIGNED32;
+
+--
+-- The following variables are set to the appropriate execution
+-- times by the ISR. This is done so the times will be available
+-- to be printed by a task.
+--
+
+ INTERRUPT_ENTER_TIME : RTEMS.UNSIGNED32;
+ INTERRUPT_RETURN_TIME : RTEMS.UNSIGNED32;
+
+ INTERRUPT_ENTER_NESTED_TIME : RTEMS.UNSIGNED32;
+ INTERRUPT_RETURN_NESTED_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task reports the following execution times:
+--
+-- + interrupt entry overhead for a nested interrupt
+-- + interrupt exit overhead for a nested interrupt
+-- + interrupt entry overhead when no preemption occurs
+-- + interrupt exit overhead when no preemption occurs
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_2
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task reports the following execution times:
+--
+-- + interrupt entry overhead when preemption occurs
+-- + interrupt exit overhead when preemption occurs
+--
+
+ procedure TASK_2 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- ISR_HANDLER
+--
+-- DESCRIPTION:
+--
+-- This subprogram is the test ISR. It simply stops the
+-- timer and save the execution time for ISR_HANDLER_INNER.
+-- This is done to minimize the subroutine linkage overhead
+-- for this routine.
+--
+
+ procedure ISR_HANDLER (
+ VECTOR : in RTEMS.VECTOR_NUMBER
+ );
+
+--
+-- ISR_HANDLER_INNER
+--
+-- DESCRIPTION:
+--
+-- This subprogram is responsible for storing the execution
+-- time for the case currently being timed.
+--
+
+ procedure ISR_HANDLER_INNER;
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm28/tmtest.adb b/c/src/ada-tests/tmtests/tm28/tmtest.adb
new file mode 100644
index 0000000000..098ba750b6
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm28/tmtest.adb
@@ -0,0 +1,176 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 28 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:33 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ TASK_ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 28 ***" );
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TEST_TASK'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TEST_TASK
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ NAME : RTEMS.NAME;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ CONVERTED : RTEMS.ADDRESS;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ NAME := RTEMS.BUILD_NAME( 'P', 'O', 'R', 'T' );
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.PORT_CREATE(
+ NAME,
+ TMTEST.INTERNAL_PORT_AREA'ADDRESS,
+ TMTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ 16#FF#,
+ TMTEST.PORT_ID( INDEX ),
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.PORT_CREATE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+ TMTEST.PORT_ID( 1 ),
+ TMTEST.EXTERNAL_PORT_AREA( 16#F# )'ADDRESS,
+ CONVERTED,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_EXTERNAL_TO_INTERNAL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.PORT_EXTERNAL_TO_INTERNAL
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+ TMTEST.PORT_ID( 1 ),
+ TMTEST.INTERNAL_PORT_AREA( 16#F# )'ADDRESS,
+ CONVERTED,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_INTERNAL_TO_EXTERNAL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.PORT_INTERNAL_TO_EXTERNAL
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ RTEMS.PORT_DELETE( TMTEST.PORT_ID( INDEX ), STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.PORT_DELETE
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TEST_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm28/tmtest.ads b/c/src/ada-tests/tmtests/tm28/tmtest.ads
new file mode 100644
index 0000000000..8906448587
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm28/tmtest.ads
@@ -0,0 +1,144 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 28 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:34 joel Exp
+--
+
+with SYSTEM;
+with TIME_TEST_SUPPORT;
+with TIMER_DRIVER;
+with RTEMS;
+with System.Storage_Elements;
+
+package TMTEST is
+
+--
+-- This array contains the IDs of all RTEMS tasks created by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+
+--
+-- This array contains the IDs of all RTEMS ports created by this test.
+--
+
+ PORT_ID : array ( RTEMS.UNSIGNED32
+ range 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID;
+
+--
+-- The following area defines a memory area to be used as the
+-- internal address space of the port.
+--
+
+ INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00001000#);
+
+ INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- external address space of the port.
+--
+
+ EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00002000#);
+
+ EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and reporting the
+-- following directive execution times:
+--
+-- + PORT_CREATE
+-- + PORT_EXTERNAL_TO_INTERNAL
+-- + PORT_INTERNAL_TO_EXTERNAL
+-- + PORT_DELETE
+--
+
+ procedure TEST_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 2, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 100, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm29/tmtest.adb b/c/src/ada-tests/tmtests/tm29/tmtest.adb
new file mode 100644
index 0000000000..6aaa13db34
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm29/tmtest.adb
@@ -0,0 +1,234 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Test 29 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:36 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_CALLING_OVERHEAD;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.ID;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST 29 ***" );
+
+ TMTEST.PERIOD_NAME := RTEMS.BUILD_NAME( 'P', 'R', 'D', ' ' );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_CREATE",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_CREATE
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_PERIOD (initial)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.RATE_MONOTONIC_PERIOD( ID, RTEMS.PERIOD_STATUS, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_PERIOD (STATUS)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.RATE_MONOTONIC_CANCEL( ID, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_CANCEL",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_CANCEL
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_DELETE (cancelled)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_DELETE
+ );
+
+ RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
+
+ RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_PERIOD" );
+
+ TIMER_DRIVER.INITIALIZE;
+ RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS );
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_DELETE (active)",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_DELETE
+ );
+
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ),
+ 128,
+ 1024,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START( ID, TMTEST.TASKS'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ end loop;
+
+ RTEMS.TASK_CREATE(
+ RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
+ 200,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+ RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+ TMTEST.TASK_COUNT := 0;
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASKS
+--
+
+ procedure TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ ID : RTEMS.NAME;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS );
+ RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS );
+
+ -- Give up the processor to allow all tasks to actually
+ -- create and start their period timer before the benchmark
+ -- timer driver is initialized.
+
+ RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+
+ TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
+
+ if TMTEST.TASK_COUNT = 1 then
+ TIMER_DRIVER.INITIALIZE;
+ end if;
+
+ RTEMS.RATE_MONOTONIC_PERIOD( ID, 100, STATUS );
+
+ end TASKS;
+
+--PAGE
+--
+-- LOW_TASK
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ OVERHEAD := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_PERIOD (blocking)",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end LOW_TASK;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tm29/tmtest.ads b/c/src/ada-tests/tmtests/tm29/tmtest.ads
new file mode 100644
index 0000000000..c5b1936438
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tm29/tmtest.ads
@@ -0,0 +1,134 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Test 29 of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:37 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- The following is the name used for all periods created by this test.
+--
+
+ PERIOD_NAME : RTEMS.NAME;
+
+--
+-- The following is used to allow all tasks to create and start
+-- their period timers before the timer is started for timing
+-- the blocking case of RATE_MONOTONIC_PERIOD.
+--
+
+ TASK_COUNT : RTEMS.UNSIGNED32;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application. It also measures and
+-- reports the following directive execution times:
+--
+-- + RATE_MONOTONIC_CREATE
+-- + RATE_MONOTONIC_PERIOD the initial time
+-- + RATE_MONOTONIC_PERIOD for a period's status
+-- + RATE_MONOTONIC_CANCEL
+-- + RATE_MONOTONIC_DELETE of a cancelled period
+-- + RATE_MONOTONIC_DELETE of an active period
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- The first of these RTEMS tasks starts the timer. All of these
+-- tasks execute a blocking RATE_MONOTONIC_PERIOD.
+--
+
+ procedure TASKS (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TEST_TASK
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task stops the timer and reports the execution
+-- time for a blocking RATE_MONOTONIC_PERIOD.
+--
+
+ procedure LOW_TASK (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 111, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 111, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tmck/tmtest.adb b/c/src/ada-tests/tmtests/tmck/tmtest.adb
new file mode 100644
index 0000000000..4aca7842cd
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tmck/tmtest.adb
@@ -0,0 +1,220 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Timer Check Test of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:39 joel Exp
+--
+
+with TIMER_DRIVER;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST CHECK ***" );
+
+ TIMER_DRIVER.SET_FIND_AVERAGE_OVERHEAD( TRUE );
+
+ TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ TMTEST.TASK_NAME( 1 ),
+ 1,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ INDEX : RTEMS.UNSIGNED32;
+ begin
+
+ TMTEST.CHECK_READ_TIMER;
+
+TEST_SUPPORT.PAUSE;
+
+ TIMER_DRIVER.INITIALIZE;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "NULL timer stopped at",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 0 .. 1000
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "LOOP (1000) timer stopped at",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 0 .. 10000
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "LOOP (10000) timer stopped at",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 0 .. 50000
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "LOOP (50000) timer stopped at",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 0 .. 100000
+ loop
+ TIMER_DRIVER.EMPTY_FUNCTION;
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "LOOP (100000) timer stopped at",
+ TMTEST.END_TIME,
+ 1,
+ 0,
+ 0
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+--PAGE
+--
+-- CHECK_READ_TIMER
+--
+
+ procedure CHECK_READ_TIMER
+ is
+ INDEX : RTEMS.UNSIGNED32;
+ TIME : RTEMS.UNSIGNED32;
+ begin
+
+ for INDEX in TMTEST.DISTRIBUTION'FIRST .. TMTEST.DISTRIBUTION'LAST
+ loop
+ TMTEST.DISTRIBUTION( INDEX ) := 0;
+ end loop;
+
+ for INDEX in 1 .. TMTEST.OPERATION_COUNT
+ loop
+
+ loop
+ TIMER_DRIVER.INITIALIZE;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ exit when
+ TMTEST.END_TIME <= RTEMS.UNSIGNED32( TMTEST.DISTRIBUTION'LAST );
+
+ TEXT_IO.PUT( "TOO LONG (" );
+ UNSIGNED32_IO.PUT( TMTEST.END_TIME );
+ TEXT_IO.PUT_LINE( ")!!!" );
+ end loop;
+
+ TMTEST.DISTRIBUTION( TMTEST.END_TIME ) :=
+ TMTEST.DISTRIBUTION( TMTEST.END_TIME ) + 1;
+
+ end loop;
+
+ TEXT_IO.PUT_LINE(
+ "Units may not be in microseconds for this test!!!"
+ );
+
+ TIME := 0;
+
+ for INDEX in TMTEST.DISTRIBUTION'FIRST .. TMTEST.DISTRIBUTION'LAST
+ loop
+ if TMTEST.DISTRIBUTION( INDEX ) /= 0 then
+ TIME := TIME + (TMTEST.DISTRIBUTION( INDEX ) * INDEX);
+ UNSIGNED32_IO.PUT( INDEX );
+ TEXT_IO.PUT( " " );
+ UNSIGNED32_IO.PUT( TMTEST.DISTRIBUTION( INDEX ) );
+ TEXT_IO.NEW_LINE;
+ end if;
+ end loop;
+
+ TEXT_IO.PUT( "Total time = " );
+ UNSIGNED32_IO.PUT( TIME );
+ TEXT_IO.NEW_LINE;
+
+ end CHECK_READ_TIMER;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tmck/tmtest.ads b/c/src/ada-tests/tmtests/tmck/tmtest.ads
new file mode 100644
index 0000000000..76c65b7c00
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tmck/tmtest.ads
@@ -0,0 +1,135 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Timer Check Test of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:40 joel Exp
+--
+
+with TIMER_DRIVER;
+with RTEMS;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- The following defines the number of iterations of each timed
+-- operation to perform.
+--
+
+ OPERATION_COUNT : constant RTEMS.UNSIGNED32 := 100000;
+
+--
+-- The following array is used to determine how many times
+-- each time between 0 and 1000 microseconds was returned
+-- when simply starting and stopping the timer.
+
+ DISTRIBUTION : array ( RTEMS.UNSIGNED32 range 0 .. 10000 ) of RTEMS.UNSIGNED32;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task invokes CHECK_READ_TIMER before demonstrating
+-- that increasing the order of magnitude of the number of loop
+-- iterations performed has a corresponding impact on the time
+-- reported by the timer driver.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- CHECK_READ_TIMER
+--
+-- DESCRIPTION:
+--
+-- This subprogram is used to determine the overhead associated
+-- with starting and stopping the timer. It is also useful
+-- for determining if unexpected times will be reported.
+--
+
+ procedure CHECK_READ_TIMER;
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 2, -- maximum # tasks
+ 0, -- maximum # timers
+ 1, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb
new file mode 100644
index 0000000000..79f3241699
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb
@@ -0,0 +1,876 @@
+--
+-- DUMMY_RTEMS / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package contains implementation of stub routines
+-- which are used to time the invocation overhead incurred
+-- with an Ada application program invokes each RTEMS directive.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- dummy_rtems.adb,v 1.3 1995/07/12 19:44:42 joel Exp
+--
+
+with RTEMS;
+
+package body DUMMY_RTEMS is
+
+-- Initialization Manager
+
+ procedure INITIALIZE_EXECUTIVE (
+ CONFIGURATION_TABLE : in RTEMS.CONFIGURATION_TABLE_POINTER;
+ CPU_TABLE : in RTEMS.CPU_TABLE_POINTER;
+ TASK_TABLE : in RTEMS.INITIALIZATION_TASKS_TABLE_POINTER;
+ DRIVER_TABLE : in RTEMS.DRIVER_ADDRESS_TABLE_POINTER;
+ EXTENSION_TABLE : in RTEMS.EXTENSIONS_TABLE_POINTER;
+ MULTIPROCESSING_TABLE : in RTEMS.MULTIPROCESSING_TABLE_POINTER;
+ MPCI_TABLE : in RTEMS.MPCI_TABLE_POINTER
+ ) is
+ begin
+
+ NULL;
+
+ end INITIALIZE_EXECUTIVE;
+
+ procedure SHUTDOWN_EXECUTIVE (
+ RESULT : in RTEMS.UNSIGNED32
+ ) is
+ begin
+
+ NULL;
+
+ end SHUTDOWN_EXECUTIVE;
+
+-- Task Manager
+
+ procedure TASK_CREATE (
+ NAME : in RTEMS.NAME;
+ INITIAL_PRIORITY : in RTEMS.TASK_PRIORITY;
+ STACK_SIZE : in RTEMS.UNSIGNED32;
+ INITIAL_MODES : in RTEMS.MODE;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_CREATE;
+
+ procedure TASK_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_IDENT;
+
+ procedure TASK_START (
+ ID : in RTEMS.ID;
+ ENTRY_POINT : in RTEMS.TASK_ENTRY_POINT;
+ ARGUMENT : in RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_START;
+
+ procedure TASK_RESTART (
+ ID : in RTEMS.ID;
+ ARGUMENT : in RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_RESTART;
+
+ procedure TASK_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_DELETE;
+
+ procedure TASK_SUSPEND (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_SUSPEND;
+
+ procedure TASK_RESUME (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_RESUME;
+
+ procedure TASK_SET_PRIORITY (
+ ID : in RTEMS.ID;
+ NEW_PRIORITY : in RTEMS.TASK_PRIORITY;
+ OLD_PRIORITY : out RTEMS.TASK_PRIORITY;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_SET_PRIORITY;
+
+ procedure TASK_MODE (
+ MODE_SET : in RTEMS.MODE;
+ MASK : in RTEMS.MODE;
+ PREVIOUS_MODE_SET : out RTEMS.MODE;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_MODE;
+
+ procedure TASK_GET_NOTE (
+ ID : in RTEMS.ID;
+ NOTEPAD : in RTEMS.NOTEPAD_INDEX;
+ NOTE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_GET_NOTE;
+
+ procedure TASK_SET_NOTE (
+ ID : in RTEMS.ID;
+ NOTEPAD : in RTEMS.NOTEPAD_INDEX;
+ NOTE : in RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_SET_NOTE;
+
+ procedure TASK_WAKE_WHEN (
+ TIME_BUFFER : in RTEMS.TIME_OF_DAY;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_WAKE_WHEN;
+
+ procedure TASK_WAKE_AFTER (
+ TICKS : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TASK_WAKE_AFTER;
+
+-- Interrupt Manager
+
+ procedure INTERRUPT_CATCH (
+ NEW_ISR_HANDLER : in RTEMS.ADDRESS;
+ VECTOR : in RTEMS.VECTOR_NUMBER;
+ OLD_ISR_HANDLER : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end INTERRUPT_CATCH;
+
+-- Clock Manager
+
+ procedure CLOCK_GET (
+ OPTION : in RTEMS.CLOCK_GET_OPTIONS;
+ TIME_BUFFER : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end CLOCK_GET;
+
+ procedure CLOCK_SET (
+ TIME_BUFFER : in RTEMS.TIME_OF_DAY;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end CLOCK_SET;
+
+ procedure CLOCK_TICK (
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end CLOCK_TICK;
+
+-- Timer Manager
+
+ procedure TIMER_CREATE (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_CREATE;
+
+ procedure TIMER_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_DELETE;
+
+ procedure TIMER_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_IDENT;
+
+ procedure TIMER_FIRE_AFTER (
+ ID : in RTEMS.ID;
+ TICKS : in RTEMS.INTERVAL;
+ ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE;
+ USER_DATA : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_FIRE_AFTER;
+
+ procedure TIMER_FIRE_WHEN (
+ ID : in RTEMS.ID;
+ WALL_TIME : in RTEMS.TIME_OF_DAY;
+ ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE;
+ USER_DATA : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_FIRE_WHEN;
+
+ procedure TIMER_RESET (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_RESET;
+
+ procedure TIMER_CANCEL (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end TIMER_CANCEL;
+
+-- Semaphore Manager
+
+ procedure SEMAPHORE_CREATE (
+ NAME : in RTEMS.NAME;
+ COUNT : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SEMAPHORE_CREATE;
+
+ procedure SEMAPHORE_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SEMAPHORE_DELETE;
+
+ procedure SEMAPHORE_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SEMAPHORE_IDENT;
+
+ procedure SEMAPHORE_OBTAIN (
+ ID : in RTEMS.ID;
+ OPTION_SET : in RTEMS.OPTION;
+ TIMEOUT : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SEMAPHORE_OBTAIN;
+
+ procedure SEMAPHORE_RELEASE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SEMAPHORE_RELEASE;
+
+-- Message Queue Manager
+
+ procedure MESSAGE_QUEUE_CREATE (
+ NAME : in RTEMS.NAME;
+ COUNT : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_CREATE;
+
+ procedure MESSAGE_QUEUE_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_IDENT;
+
+ procedure MESSAGE_QUEUE_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_DELETE;
+
+ procedure MESSAGE_QUEUE_SEND (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_SEND;
+
+ procedure MESSAGE_QUEUE_URGENT (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_URGENT;
+
+ procedure MESSAGE_QUEUE_BROADCAST (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ COUNT : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_BROADCAST;
+
+ procedure MESSAGE_QUEUE_RECEIVE (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ OPTION_SET : in RTEMS.OPTION;
+ TIMEOUT : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_RECEIVE;
+
+ procedure MESSAGE_QUEUE_FLUSH (
+ ID : in RTEMS.ID;
+ COUNT : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end MESSAGE_QUEUE_FLUSH;
+
+-- Event Manager
+
+ procedure EVENT_SEND (
+ ID : in RTEMS.ID;
+ EVENT_IN : in RTEMS.EVENT_SET;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end EVENT_SEND;
+
+ procedure EVENT_RECEIVE (
+ EVENT_IN : in RTEMS.EVENT_SET;
+ OPTION_SET : in RTEMS.OPTION;
+ TICKS : in RTEMS.INTERVAL;
+ EVENT_OUT : out RTEMS.EVENT_SET;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end EVENT_RECEIVE;
+
+-- Signal Manager
+
+ procedure SIGNAL_CATCH (
+ ASR_HANDLER : in RTEMS.ASR_HANDLER;
+ MODE_SET : in RTEMS.MODE;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SIGNAL_CATCH;
+
+ procedure SIGNAL_SEND (
+ ID : in RTEMS.ID;
+ SIGNAL_SET : in RTEMS.SIGNAL_SET;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end SIGNAL_SEND;
+
+-- Partition Manager
+
+ procedure PARTITION_CREATE (
+ NAME : in RTEMS.NAME;
+ STARTING_ADDRESS : in RTEMS.ADDRESS;
+ LENGTH : in RTEMS.UNSIGNED32;
+ BUFFER_SIZE : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PARTITION_CREATE;
+
+ procedure PARTITION_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PARTITION_IDENT;
+
+ procedure PARTITION_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PARTITION_DELETE;
+
+ procedure PARTITION_GET_BUFFER (
+ ID : in RTEMS.ID;
+ BUFFER : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PARTITION_GET_BUFFER;
+
+ procedure PARTITION_RETURN_BUFFER (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PARTITION_RETURN_BUFFER;
+
+-- Region Manager
+
+ procedure REGION_CREATE (
+ NAME : in RTEMS.NAME;
+ STARTING_ADDRESS : in RTEMS.ADDRESS;
+ LENGTH : in RTEMS.UNSIGNED32;
+ PAGE_SIZE : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end REGION_CREATE;
+
+ procedure REGION_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end REGION_IDENT;
+
+ procedure REGION_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end REGION_DELETE;
+
+ procedure REGION_GET_SEGMENT (
+ ID : in RTEMS.ID;
+ SIZE : in RTEMS.UNSIGNED32;
+ OPTION_SET : in RTEMS.OPTION;
+ TIMEOUT : in RTEMS.INTERVAL;
+ SEGMENT : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end REGION_GET_SEGMENT;
+
+ procedure REGION_RETURN_SEGMENT (
+ ID : in RTEMS.ID;
+ SEGMENT : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end REGION_RETURN_SEGMENT;
+
+-- Dual Ported Memory Manager
+
+ procedure PORT_CREATE (
+ NAME : in RTEMS.NAME;
+ INTERNAL_START : in RTEMS.ADDRESS;
+ EXTERNAL_START : in RTEMS.ADDRESS;
+ LENGTH : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PORT_CREATE;
+
+ procedure PORT_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PORT_IDENT;
+
+ procedure PORT_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PORT_DELETE;
+
+ procedure PORT_EXTERNAL_TO_INTERNAL (
+ ID : in RTEMS.ID;
+ EXTERNAL : in RTEMS.ADDRESS;
+ INTERNAL : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PORT_EXTERNAL_TO_INTERNAL;
+
+ procedure PORT_INTERNAL_TO_EXTERNAL (
+ ID : in RTEMS.ID;
+ INTERNAL : in RTEMS.ADDRESS;
+ EXTERNAL : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end PORT_INTERNAL_TO_EXTERNAL;
+
+-- Input/Output Manager
+
+ procedure IO_INITIALIZE (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end IO_INITIALIZE;
+
+ procedure IO_OPEN (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end IO_OPEN;
+
+ procedure IO_CLOSE (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end IO_CLOSE;
+
+ procedure IO_READ (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end IO_READ;
+
+ procedure IO_WRITE (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end IO_WRITE;
+
+ procedure IO_CONTROL (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end IO_CONTROL;
+
+-- Fatal Error Manager
+
+ procedure FATAL_ERROR_OCCURRED (
+ THE_ERROR : in RTEMS.UNSIGNED32
+ ) is
+ begin
+
+ NULL;
+
+ end FATAL_ERROR_OCCURRED;
+
+-- Rate Monotonic Manager
+
+ procedure RATE_MONOTONIC_CREATE (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end RATE_MONOTONIC_CREATE;
+
+ procedure RATE_MONOTONIC_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end RATE_MONOTONIC_IDENT;
+
+ procedure RATE_MONOTONIC_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end RATE_MONOTONIC_DELETE;
+
+ procedure RATE_MONOTONIC_CANCEL (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end RATE_MONOTONIC_CANCEL;
+
+ procedure RATE_MONOTONIC_PERIOD (
+ ID : in RTEMS.ID;
+ LENGTH : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ ) is
+ begin
+
+ RESULT := RTEMS.SUCCESSFUL;
+
+ end RATE_MONOTONIC_PERIOD;
+
+-- Multiprocessing Manager
+
+ procedure MULTIPROCESSING_ANNOUNCE
+ is
+ begin
+
+ NULL;
+
+ end MULTIPROCESSING_ANNOUNCE;
+
+end DUMMY_RTEMS;
diff --git a/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads
new file mode 100644
index 0000000000..ef9009173a
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads
@@ -0,0 +1,520 @@
+--
+-- DUMMY_RTEMS / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package contains specifications for stub routines
+-- which are used to time the invocation overhead incurred
+-- with an Ada application program invokes each RTEMS directive.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- dummy_rtems.ads,v 1.3 1995/07/12 19:44:43 joel Exp
+--
+
+with RTEMS;
+
+package DUMMY_RTEMS is
+
+-- Initialization Manager
+
+ procedure INITIALIZE_EXECUTIVE (
+ CONFIGURATION_TABLE : in RTEMS.CONFIGURATION_TABLE_POINTER;
+ CPU_TABLE : in RTEMS.CPU_TABLE_POINTER;
+ TASK_TABLE : in RTEMS.INITIALIZATION_TASKS_TABLE_POINTER;
+ DRIVER_TABLE : in RTEMS.DRIVER_ADDRESS_TABLE_POINTER;
+ EXTENSION_TABLE : in RTEMS.EXTENSIONS_TABLE_POINTER;
+ MULTIPROCESSING_TABLE : in RTEMS.MULTIPROCESSING_TABLE_POINTER;
+ MPCI_TABLE : in RTEMS.MPCI_TABLE_POINTER
+ );
+
+ procedure SHUTDOWN_EXECUTIVE (
+ RESULT : in RTEMS.UNSIGNED32
+ );
+
+-- Task Manager
+
+ procedure TASK_CREATE (
+ NAME : in RTEMS.NAME;
+ INITIAL_PRIORITY : in RTEMS.TASK_PRIORITY;
+ STACK_SIZE : in RTEMS.UNSIGNED32;
+ INITIAL_MODES : in RTEMS.MODE;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_START (
+ ID : in RTEMS.ID;
+ ENTRY_POINT : in RTEMS.TASK_ENTRY_POINT;
+ ARGUMENT : in RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_RESTART (
+ ID : in RTEMS.ID;
+ ARGUMENT : in RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_SUSPEND (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_RESUME (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_SET_PRIORITY (
+ ID : in RTEMS.ID;
+ NEW_PRIORITY : in RTEMS.TASK_PRIORITY;
+ OLD_PRIORITY : out RTEMS.TASK_PRIORITY;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_MODE (
+ MODE_SET : in RTEMS.MODE;
+ MASK : in RTEMS.MODE;
+ PREVIOUS_MODE_SET : out RTEMS.MODE;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_GET_NOTE (
+ ID : in RTEMS.ID;
+ NOTEPAD : in RTEMS.NOTEPAD_INDEX;
+ NOTE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_SET_NOTE (
+ ID : in RTEMS.ID;
+ NOTEPAD : in RTEMS.NOTEPAD_INDEX;
+ NOTE : in RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_WAKE_WHEN (
+ TIME_BUFFER : in RTEMS.TIME_OF_DAY;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TASK_WAKE_AFTER (
+ TICKS : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Interrupt Manager
+
+ procedure INTERRUPT_CATCH (
+ NEW_ISR_HANDLER : in RTEMS.ADDRESS;
+ VECTOR : in RTEMS.VECTOR_NUMBER;
+ OLD_ISR_HANDLER : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Clock Manager
+
+ procedure CLOCK_GET (
+ OPTION : in RTEMS.CLOCK_GET_OPTIONS;
+ TIME_BUFFER : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure CLOCK_SET (
+ TIME_BUFFER : in RTEMS.TIME_OF_DAY;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure CLOCK_TICK (
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Timer Manager
+
+ procedure TIMER_CREATE (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TIMER_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TIMER_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TIMER_FIRE_AFTER (
+ ID : in RTEMS.ID;
+ TICKS : in RTEMS.INTERVAL;
+ ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE;
+ USER_DATA : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TIMER_FIRE_WHEN (
+ ID : in RTEMS.ID;
+ WALL_TIME : in RTEMS.TIME_OF_DAY;
+ ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE;
+ USER_DATA : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TIMER_RESET (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure TIMER_CANCEL (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Semaphore Manager
+
+ procedure SEMAPHORE_CREATE (
+ NAME : in RTEMS.NAME;
+ COUNT : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure SEMAPHORE_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure SEMAPHORE_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure SEMAPHORE_OBTAIN (
+ ID : in RTEMS.ID;
+ OPTION_SET : in RTEMS.OPTION;
+ TIMEOUT : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure SEMAPHORE_RELEASE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Message Queue Manager
+
+ procedure MESSAGE_QUEUE_CREATE (
+ NAME : in RTEMS.NAME;
+ COUNT : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_SEND (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_URGENT (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_BROADCAST (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ COUNT : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_RECEIVE (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.BUFFER_POINTER;
+ OPTION_SET : in RTEMS.OPTION;
+ TIMEOUT : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure MESSAGE_QUEUE_FLUSH (
+ ID : in RTEMS.ID;
+ COUNT : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Event Manager
+
+ procedure EVENT_SEND (
+ ID : in RTEMS.ID;
+ EVENT_IN : in RTEMS.EVENT_SET;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure EVENT_RECEIVE (
+ EVENT_IN : in RTEMS.EVENT_SET;
+ OPTION_SET : in RTEMS.OPTION;
+ TICKS : in RTEMS.INTERVAL;
+ EVENT_OUT : out RTEMS.EVENT_SET;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Signal Manager
+
+ procedure SIGNAL_CATCH (
+ ASR_HANDLER : in RTEMS.ASR_HANDLER;
+ MODE_SET : in RTEMS.MODE;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure SIGNAL_SEND (
+ ID : in RTEMS.ID;
+ SIGNAL_SET : in RTEMS.SIGNAL_SET;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Partition Manager
+
+ procedure PARTITION_CREATE (
+ NAME : in RTEMS.NAME;
+ STARTING_ADDRESS : in RTEMS.ADDRESS;
+ LENGTH : in RTEMS.UNSIGNED32;
+ BUFFER_SIZE : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PARTITION_IDENT (
+ NAME : in RTEMS.NAME;
+ NODE : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PARTITION_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PARTITION_GET_BUFFER (
+ ID : in RTEMS.ID;
+ BUFFER : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PARTITION_RETURN_BUFFER (
+ ID : in RTEMS.ID;
+ BUFFER : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Region Manager
+
+ procedure REGION_CREATE (
+ NAME : in RTEMS.NAME;
+ STARTING_ADDRESS : in RTEMS.ADDRESS;
+ LENGTH : in RTEMS.UNSIGNED32;
+ PAGE_SIZE : in RTEMS.UNSIGNED32;
+ ATTRIBUTE_SET : in RTEMS.ATTRIBUTE;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure REGION_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure REGION_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure REGION_GET_SEGMENT (
+ ID : in RTEMS.ID;
+ SIZE : in RTEMS.UNSIGNED32;
+ OPTION_SET : in RTEMS.OPTION;
+ TIMEOUT : in RTEMS.INTERVAL;
+ SEGMENT : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure REGION_RETURN_SEGMENT (
+ ID : in RTEMS.ID;
+ SEGMENT : in RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Dual Ported Memory Manager
+
+ procedure PORT_CREATE (
+ NAME : in RTEMS.NAME;
+ INTERNAL_START : in RTEMS.ADDRESS;
+ EXTERNAL_START : in RTEMS.ADDRESS;
+ LENGTH : in RTEMS.UNSIGNED32;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PORT_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PORT_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PORT_EXTERNAL_TO_INTERNAL (
+ ID : in RTEMS.ID;
+ EXTERNAL : in RTEMS.ADDRESS;
+ INTERNAL : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure PORT_INTERNAL_TO_EXTERNAL (
+ ID : in RTEMS.ID;
+ INTERNAL : in RTEMS.ADDRESS;
+ EXTERNAL : out RTEMS.ADDRESS;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Input/Output Manager
+
+ procedure IO_INITIALIZE (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure IO_OPEN (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure IO_CLOSE (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure IO_READ (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure IO_WRITE (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure IO_CONTROL (
+ MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : in RTEMS.DEVICE_MINOR_NUMBER;
+ ARGUMENT : in RTEMS.ADDRESS;
+ RETURN_VALUE : out RTEMS.UNSIGNED32;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Fatal Error Manager
+
+ procedure FATAL_ERROR_OCCURRED (
+ THE_ERROR : in RTEMS.UNSIGNED32
+ );
+
+-- Rate Monotonic Manager
+
+ procedure RATE_MONOTONIC_CREATE (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure RATE_MONOTONIC_IDENT (
+ NAME : in RTEMS.NAME;
+ ID : out RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure RATE_MONOTONIC_DELETE (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure RATE_MONOTONIC_CANCEL (
+ ID : in RTEMS.ID;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+ procedure RATE_MONOTONIC_PERIOD (
+ ID : in RTEMS.ID;
+ LENGTH : in RTEMS.INTERVAL;
+ RESULT : out RTEMS.STATUS_CODES
+ );
+
+-- Multiprocessing Manager
+
+ procedure MULTIPROCESSING_ANNOUNCE;
+
+end DUMMY_RTEMS;
diff --git a/c/src/ada-tests/tmtests/tmoverhd/tmtest.adb b/c/src/ada-tests/tmtests/tmoverhd/tmtest.adb
new file mode 100644
index 0000000000..07cc787a42
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tmoverhd/tmtest.adb
@@ -0,0 +1,1565 @@
+--
+-- TMTEST / BODY
+--
+-- DESCRIPTION:
+--
+-- This package is the implementation of Calling Overhead Test of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.adb,v 1.3 1995/07/12 19:44:45 joel Exp
+--
+
+with BSP;
+with DUMMY_RTEMS;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with TIME_TEST_SUPPORT;
+with UNSIGNED32_IO;
+
+package body TMTEST is
+
+--PAGE
+--
+-- INIT
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ TEXT_IO.NEW_LINE( 2 );
+ TEXT_IO.PUT_LINE( "*** TIME TEST OVERHEAD ***" );
+
+ TIMER_DRIVER.SET_FIND_AVERAGE_OVERHEAD( TRUE );
+
+ TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
+
+ RTEMS.TASK_CREATE(
+ TMTEST.TASK_NAME( 1 ),
+ 254,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ TMTEST.TASK_ID( 1 ),
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+ RTEMS.TASK_START(
+ TMTEST.TASK_ID( 1 ),
+ TMTEST.TASK_1'ACCESS,
+ 0,
+ STATUS
+ );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+ RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+ TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+ end INIT;
+
+--PAGE
+--
+-- TIMER_HANDLER
+--
+
+ procedure TIMER_HANDLER (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ ) is
+ begin
+
+ NULL;
+
+ end TIMER_HANDLER;
+
+--PAGE
+--
+-- ISR_HANDLER
+--
+
+ procedure ISR_HANDLER (
+ VECTOR : in RTEMS.VECTOR_NUMBER
+ ) is
+ begin
+
+ NULL;
+
+ end ISR_HANDLER;
+
+--PAGE
+--
+-- ASR_HANDLER
+--
+
+ procedure ASR_HANDLER (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ ) is
+ begin
+
+ NULL;
+
+ end ASR_HANDLER;
+
+--PAGE
+--
+-- TASK_1
+--
+
+ CPU_TABLE : aliased RTEMS.CPU_TABLE;
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ ) is
+ NAME : RTEMS.NAME;
+ INDEX : RTEMS.UNSIGNED32;
+ OVERHEAD : RTEMS.UNSIGNED32;
+ ID : RTEMS.ID;
+ IN_PRIORITY : RTEMS.TASK_PRIORITY;
+ OUT_PRIORITY : RTEMS.TASK_PRIORITY;
+ IN_MODE : RTEMS.MODE;
+ MASK : RTEMS.MODE;
+ OUT_MODE : RTEMS.MODE;
+ NOTE : RTEMS.UNSIGNED32;
+ TIME : RTEMS.TIME_OF_DAY;
+ TIMEOUT : RTEMS.INTERVAL;
+ SIGNALS : RTEMS.SIGNAL_SET;
+ ADDRESS_1 : RTEMS.ADDRESS;
+ EVENTS : RTEMS.SIGNAL_SET;
+ BUFFER : RTEMS.BUFFER;
+ BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+ COUNT : RTEMS.UNSIGNED32;
+ MAJOR : RTEMS.DEVICE_MAJOR_NUMBER;
+ MINOR : RTEMS.DEVICE_MINOR_NUMBER;
+ IO_RESULT : RTEMS.UNSIGNED32;
+ ERROR : RTEMS.UNSIGNED32;
+ STATUS : RTEMS.STATUS_CODES;
+ begin
+
+ NAME := RTEMS.BUILD_NAME( 'N', 'A', 'M', 'E' );
+
+ BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+-- INITIALIZE_EXECUTIVE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.INITIALIZE_EXECUTIVE(
+ BSP.CONFIGURATION'ACCESS,
+ CPU_TABLE'ACCESS,
+ TMTEST.INITIALIZATION_TASKS'ACCESS,
+ RTEMS.NO_DEVICE_DRIVERS,
+ RTEMS.NO_USER_EXTENSIONS,
+ RTEMS.NO_MULTIPROCESSING_TABLE,
+ RTEMS.NO_MPCI_TABLE
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INITIALIZE_EXECUTIVE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SHUTDOWN_EXECUTIVE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SHUTDOWN_EXECUTIVE( ERROR );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SHUTDOWN_EXECUTIVE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_CREATE(
+ NAME,
+ IN_PRIORITY,
+ 2048,
+ RTEMS.DEFAULT_MODES,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_IDENT(
+ NAME,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_START
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_START",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_RESTART
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_RESTART( ID, 0, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESTART",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_SUSPEND
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_SUSPEND( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SUSPEND",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_RESUME
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_RESUME( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_RESUME",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_SET_PRIORITY
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_SET_PRIORITY(
+ ID,
+ IN_PRIORITY,
+ OUT_PRIORITY,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SET_PRIORITY",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_MODE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_MODE(
+ IN_MODE,
+ MASK,
+ OUT_MODE,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_MODE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_GET_NOTE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_GET_NOTE( ID, 1, NOTE, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_GET_NOTE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_SET_NOTE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_SET_NOTE( ID, 1, NOTE, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_SET_NOTE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_WAKE_WHEN
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_WAKE_WHEN",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TASK_WAKE_AFTER
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TASK_WAKE_AFTER( TIMEOUT, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TASK_WAKE_AFTER",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- INTERRUPT_CATCH
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.INTERRUPT_CATCH(
+ TMTEST.ISR_HANDLER'ADDRESS,
+ RTEMS.VECTOR_NUMBER'FIRST,
+ ADDRESS_1,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "INTERRUPT_CATCH",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- CLOCK_GET
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "CLOCK_GET",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- CLOCK_SET
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.CLOCK_SET( TIME, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "CLOCK_SET",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- CLOCK_TICK
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.CLOCK_TICK( STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "CLOCK_TICK",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+TEST_SUPPORT.PAUSE;
+
+-- TIMER_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_CREATE( NAME, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TIMER_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TIMER_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_IDENT(
+ NAME,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TIMER_FIRE_AFTER
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_FIRE_AFTER(
+ ID,
+ TIMEOUT,
+ TMTEST.TIMER_HANDLER'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_FIRE_AFTER",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TIMER_FIRE_WHEN
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_FIRE_WHEN(
+ ID,
+ TIME,
+ TMTEST.TIMER_HANDLER'ACCESS,
+ RTEMS.NULL_ADDRESS,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_FIRE_WHEN",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TIMER_RESET
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_RESET( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_RESET",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- TIMER_CANCEL
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.TIMER_CANCEL( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "TIMER_CANCEL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SEMAPHORE_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SEMAPHORE_CREATE(
+ NAME,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SEMAPHORE_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SEMAPHORE_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SEMAPHORE_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SEMAPHORE_IDENT(
+ NAME,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SEMAPHORE_OBTAIN
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SEMAPHORE_OBTAIN(
+ ID,
+ RTEMS.DEFAULT_OPTIONS,
+ TIMEOUT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_OBTAIN",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SEMAPHORE_RELEASE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SEMAPHORE_RELEASE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SEMAPHORE_RELEASE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_CREATE(
+ NAME,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_IDENT(
+ NAME,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_SEND
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_SEND( ID, BUFFER_POINTER, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_SEND",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_URGENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_URGENT( ID, BUFFER_POINTER, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_URGENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_BROADCAST
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_BROADCAST(
+ ID,
+ BUFFER_POINTER,
+ COUNT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_BROADCAST",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_RECEIVE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_RECEIVE(
+ ID,
+ BUFFER_POINTER,
+ RTEMS.DEFAULT_OPTIONS,
+ TIMEOUT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_RECEIVE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MESSAGE_QUEUE_FLUSH
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MESSAGE_QUEUE_FLUSH( ID, COUNT, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MESSAGE_QUEUE_FLUSH",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+TEST_SUPPORT.PAUSE;
+
+-- EVENT_SEND
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.EVENT_SEND( ID, EVENTS, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_SEND",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- EVENT_RECEIVE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.EVENT_RECEIVE(
+ RTEMS.EVENT_16,
+ EVENTS,
+ RTEMS.DEFAULT_OPTIONS,
+ TIMEOUT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "EVENT_RECEIVE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SIGNAL_CATCH
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SIGNAL_CATCH(
+ TMTEST.ASR_HANDLER'ACCESS,
+ RTEMS.DEFAULT_MODES,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_CATCH",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- SIGNAL_SEND
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.SIGNAL_SEND( ID, SIGNALS, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "SIGNAL_SEND",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PARTITION_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PARTITION_CREATE(
+ NAME,
+ TMTEST.MEMORY_AREA'ADDRESS,
+ 2048,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PARTITION_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PARTITION_IDENT(
+ NAME,
+ RTEMS.SEARCH_ALL_NODES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PARTITION_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PARTITION_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PARTITION_GET_BUFFER
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PARTITION_GET_BUFFER( ID, ADDRESS_1, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_GET_BUFFER",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PARTITION_RETURN_BUFFER
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PARTITION_RETURN_BUFFER( ID, ADDRESS_1, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PARTITION_RETURN_BUFFER",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- REGION_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.REGION_CREATE(
+ NAME,
+ TMTEST.MEMORY_AREA'ADDRESS,
+ 2048,
+ 128,
+ RTEMS.DEFAULT_ATTRIBUTES,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- REGION_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.REGION_IDENT(
+ NAME,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- REGION_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.REGION_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- REGION_GET_SEGMENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.REGION_GET_SEGMENT(
+ ID,
+ 243,
+ RTEMS.DEFAULT_OPTIONS,
+ TIMEOUT,
+ ADDRESS_1,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_GET_SEGMENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- REGION_RETURN_SEGMENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.REGION_RETURN_SEGMENT( ID, ADDRESS_1, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "REGION_RETURN_SEGMENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PORT_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PORT_CREATE(
+ NAME,
+ TMTEST.INTERNAL_PORT_AREA'ADDRESS,
+ TMTEST.EXTERNAL_PORT_AREA'ADDRESS,
+ TMTEST.INTERNAL_PORT_AREA'LENGTH,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PORT_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PORT_IDENT( NAME, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PORT_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PORT_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PORT_EXTERNAL_TO_INTERNAL
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+ ID,
+ TMTEST.EXTERNAL_PORT_AREA( 7 )'ADDRESS,
+ ADDRESS_1,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_EXTERNAL_TO_INTERNAL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- PORT_INTERNAL_TO_EXTERNAL
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+ ID,
+ TMTEST.INTERNAL_PORT_AREA( 7 )'ADDRESS,
+ ADDRESS_1,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "PORT_INTERNAL_TO_EXTERNAL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+TEST_SUPPORT.PAUSE;
+
+-- IO_INITIALIZE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.IO_INITIALIZE(
+ MAJOR,
+ MINOR,
+ ADDRESS_1,
+ IO_RESULT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_INITIALIZE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- IO_OPEN
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.IO_OPEN(
+ MAJOR,
+ MINOR,
+ ADDRESS_1,
+ IO_RESULT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_OPEN",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- IO_CLOSE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.IO_CLOSE(
+ MAJOR,
+ MINOR,
+ ADDRESS_1,
+ IO_RESULT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_CLOSE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- IO_READ
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.IO_READ(
+ MAJOR,
+ MINOR,
+ ADDRESS_1,
+ IO_RESULT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_READ",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- IO_WRITE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.IO_WRITE(
+ MAJOR,
+ MINOR,
+ ADDRESS_1,
+ IO_RESULT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_WRITE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- IO_CONTROL
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.IO_CONTROL(
+ MAJOR,
+ MINOR,
+ ADDRESS_1,
+ IO_RESULT,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "IO_CONTROL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- FATAL_ERROR_OCCURRED
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.FATAL_ERROR_OCCURRED( ERROR );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "FATAL_ERROR_OCCURRED",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- RATE_MONOTONIC_CREATE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.RATE_MONOTONIC_CREATE( NAME, ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_CREATE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- RATE_MONOTONIC_IDENT
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.RATE_MONOTONIC_IDENT(
+ NAME,
+ ID,
+ STATUS
+ );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_IDENT",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- RATE_MONOTONIC_DELETE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_DELETE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- RATE_MONOTONIC_CANCEL
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.RATE_MONOTONIC_CANCEL( ID, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_CANCEL",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- RATE_MONOTONIC_PERIOD
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.RATE_MONOTONIC_PERIOD( ID, TIMEOUT, STATUS );
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "RATE_MONOTONIC_PERIOD",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+-- MULTIPROCESSING_ANNOUNCE
+
+ TIMER_DRIVER.INITIALIZE;
+ for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
+ loop
+ DUMMY_RTEMS.MULTIPROCESSING_ANNOUNCE;
+ end loop;
+ TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
+
+ TIME_TEST_SUPPORT.PUT_TIME(
+ "MULTIPROCESSING_ANNOUNCE",
+ TMTEST.END_TIME,
+ TIME_TEST_SUPPORT.OPERATION_COUNT,
+ OVERHEAD,
+ 0
+ );
+
+ RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+ end TASK_1;
+
+end TMTEST;
diff --git a/c/src/ada-tests/tmtests/tmoverhd/tmtest.ads b/c/src/ada-tests/tmtests/tmoverhd/tmtest.ads
new file mode 100644
index 0000000000..0375bdf22e
--- /dev/null
+++ b/c/src/ada-tests/tmtests/tmoverhd/tmtest.ads
@@ -0,0 +1,180 @@
+--
+-- TMTEST / SPECIFICATION
+--
+-- DESCRIPTION:
+--
+-- This package is the specification for Calling Overhead Test of the RTEMS
+-- Timing Test Suite.
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+-- On-Line Applications Research Corporation (OAR).
+-- All rights assigned to U.S. Government, 1994.
+--
+-- This material may be reproduced by or for the U.S. Government pursuant
+-- to the copyright license under the clause at DFARS 252.227-7013. This
+-- notice must appear in all copies of this file and its derivatives.
+--
+-- tmtest.ads,v 1.3 1995/07/12 19:44:46 joel Exp
+--
+
+with RTEMS;
+with SYSTEM;
+with TIMER_DRIVER;
+with System.Storage_Elements;
+
+package TMTEST is
+
+--
+-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
+-- by this test.
+--
+
+ TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+ TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+-- The following variable is set to the execution time returned
+-- by the timer.
+--
+
+ END_TIME : RTEMS.UNSIGNED32;
+
+--
+-- The following area defines a memory area to be used as the
+-- internal address space of the port.
+--
+
+ INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00001000#);
+
+ INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+-- The following area defines a memory area to be used as the
+-- external address space of the port.
+--
+
+ EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+ System.Storage_Elements.To_Address(16#00002000#);
+
+ EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+ of RTEMS.UNSIGNED8;
+ for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+
+--
+-- The following area defines a memory area to be used as the
+-- memory space for a partition and later for a region.
+--
+
+ MEMORY_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 ) of RTEMS.UNSIGNED8;
+ for MEMORY_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+-- INIT
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task initializes the application.
+--
+
+ procedure INIT (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- TIMER_HANDLER
+--
+-- DESCRIPTION:
+--
+-- This subprogram is a timer service routine.
+--
+
+ procedure TIMER_HANDLER (
+ IGNORED_ID : in RTEMS.ID;
+ IGNORED_ADDRESS : in RTEMS.ADDRESS
+ );
+
+--
+-- ISR_HANDLER
+--
+-- DESCRIPTION:
+--
+-- This subprogram is an interrupt service routine.
+--
+
+ procedure ISR_HANDLER (
+ VECTOR : in RTEMS.VECTOR_NUMBER
+ );
+
+--
+-- ASR_HANDLER
+--
+-- DESCRIPTION:
+--
+-- This subprogram is an asynchronous signal routine.
+--
+
+ procedure ASR_HANDLER (
+ SIGNALS : in RTEMS.SIGNAL_SET
+ );
+
+--
+-- TASK_1
+--
+-- DESCRIPTION:
+--
+-- This RTEMS task is responsible for measuring and
+-- reporting the calling overhead for all RTEMS
+-- directives.
+--
+
+ procedure TASK_1 (
+ ARGUMENT : in RTEMS.TASK_ARGUMENT
+ );
+
+--
+-- This is the Initialization Tasks Table for this test.
+--
+
+ INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
+ (1=>
+ (
+ RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
+ 2048, -- stack size
+ 1, -- priority
+ RTEMS.DEFAULT_ATTRIBUTES, -- attributes
+ TMTEST.INIT'ACCESS, -- entry point
+ RTEMS.NO_PREEMPT, -- initial mode
+ 0 -- argument list
+ )
+ );
+
+--
+-- This is the Configuration Table for this test.
+--
+
+ CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+ RTEMS.NULL_ADDRESS, -- will be replaced by BSP
+ 256 * 1024, -- executive RAM size
+ 2, -- maximum # tasks
+ 0, -- maximum # timers
+ 0, -- maximum # semaphores
+ 0, -- maximum # message queues
+ 0, -- maximum # messages
+ 0, -- maximum # partitions
+ 0, -- maximum # regions
+ 0, -- maximum # dp memory areas
+ 0, -- maximum # periods
+ 0, -- maximum # user extensions
+ RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+ 0 -- # ticks in a timeslice
+ );
+
+end TMTEST;