diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1997-06-02 20:19:03 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1997-06-02 20:19:03 +0000 |
commit | 6d4e604be8b43c0555cd1c9531fe78ae199a1189 (patch) | |
tree | adc303bfeaddf541a8f45ea1597f43bf8bf7a09d /c/src/ada-tests | |
parent | Changed bitwise OR's used to build up option and attribute sets (diff) | |
download | rtems-6d4e604be8b43c0555cd1c9531fe78ae199a1189.tar.bz2 |
Initial revision
Diffstat (limited to 'c/src/ada-tests')
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; |