summaryrefslogtreecommitdiffstats
path: root/testsuites/tmtests
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/tmtests')
-rw-r--r--testsuites/tmtests/README21
-rw-r--r--testsuites/tmtests/include/timesys.h58
-rw-r--r--testsuites/tmtests/tm01/system.h43
-rw-r--r--testsuites/tmtests/tm01/task1.c189
-rw-r--r--testsuites/tmtests/tm01/tm01.doc13
-rw-r--r--testsuites/tmtests/tm02/system.h44
-rw-r--r--testsuites/tmtests/tm02/task1.c158
-rw-r--r--testsuites/tmtests/tm02/tm02.doc13
-rw-r--r--testsuites/tmtests/tm03/system.h44
-rw-r--r--testsuites/tmtests/tm03/task1.c151
-rw-r--r--testsuites/tmtests/tm03/tm03.doc13
-rw-r--r--testsuites/tmtests/tm04/system.h43
-rw-r--r--testsuites/tmtests/tm04/task1.c388
-rw-r--r--testsuites/tmtests/tm04/tm04.doc13
-rw-r--r--testsuites/tmtests/tm05/system.h44
-rw-r--r--testsuites/tmtests/tm05/task1.c132
-rw-r--r--testsuites/tmtests/tm05/tm05.doc13
-rw-r--r--testsuites/tmtests/tm06/system.h44
-rw-r--r--testsuites/tmtests/tm06/task1.c162
-rw-r--r--testsuites/tmtests/tm06/tm06.doc13
-rw-r--r--testsuites/tmtests/tm07/system.h44
-rw-r--r--testsuites/tmtests/tm07/task1.c120
-rw-r--r--testsuites/tmtests/tm07/tm07.doc13
-rw-r--r--testsuites/tmtests/tm08/system.h44
-rw-r--r--testsuites/tmtests/tm08/task1.c255
-rw-r--r--testsuites/tmtests/tm08/tm08.doc13
-rw-r--r--testsuites/tmtests/tm09/system.h42
-rw-r--r--testsuites/tmtests/tm09/task1.c226
-rw-r--r--testsuites/tmtests/tm09/tm09.doc13
-rw-r--r--testsuites/tmtests/tm10/system.h43
-rw-r--r--testsuites/tmtests/tm10/task1.c165
-rw-r--r--testsuites/tmtests/tm10/tm10.doc13
-rw-r--r--testsuites/tmtests/tm11/system.h43
-rw-r--r--testsuites/tmtests/tm11/task1.c155
-rw-r--r--testsuites/tmtests/tm11/tm11.doc13
-rw-r--r--testsuites/tmtests/tm12/system.h43
-rw-r--r--testsuites/tmtests/tm12/task1.c146
-rw-r--r--testsuites/tmtests/tm12/tm12.doc13
-rw-r--r--testsuites/tmtests/tm13/system.h43
-rw-r--r--testsuites/tmtests/tm13/task1.c154
-rw-r--r--testsuites/tmtests/tm13/tm13.doc13
-rw-r--r--testsuites/tmtests/tm14/system.h43
-rw-r--r--testsuites/tmtests/tm14/task1.c146
-rw-r--r--testsuites/tmtests/tm14/tm14.doc13
-rw-r--r--testsuites/tmtests/tm15/system.h43
-rw-r--r--testsuites/tmtests/tm15/task1.c222
-rw-r--r--testsuites/tmtests/tm15/tm15.doc13
-rw-r--r--testsuites/tmtests/tm16/system.h43
-rw-r--r--testsuites/tmtests/tm16/task1.c148
-rw-r--r--testsuites/tmtests/tm16/tm16.doc13
-rw-r--r--testsuites/tmtests/tm17/system.h43
-rw-r--r--testsuites/tmtests/tm17/task1.c127
-rw-r--r--testsuites/tmtests/tm17/tm17.doc13
-rw-r--r--testsuites/tmtests/tm18/system.h43
-rw-r--r--testsuites/tmtests/tm18/task1.c112
-rw-r--r--testsuites/tmtests/tm18/tm18.doc13
-rw-r--r--testsuites/tmtests/tm19/system.h43
-rw-r--r--testsuites/tmtests/tm19/task1.c208
-rw-r--r--testsuites/tmtests/tm19/tm19.doc13
-rw-r--r--testsuites/tmtests/tm20/system.h44
-rw-r--r--testsuites/tmtests/tm20/task1.c466
-rw-r--r--testsuites/tmtests/tm20/tm20.doc13
-rw-r--r--testsuites/tmtests/tm21/system.h50
-rw-r--r--testsuites/tmtests/tm21/task1.c236
-rw-r--r--testsuites/tmtests/tm21/tm21.doc13
-rw-r--r--testsuites/tmtests/tm22/system.h43
-rw-r--r--testsuites/tmtests/tm22/task1.c200
-rw-r--r--testsuites/tmtests/tm22/tm22.doc13
-rw-r--r--testsuites/tmtests/tm23/system.h43
-rw-r--r--testsuites/tmtests/tm23/task1.c302
-rw-r--r--testsuites/tmtests/tm23/tm23.doc13
-rw-r--r--testsuites/tmtests/tm24/system.h42
-rw-r--r--testsuites/tmtests/tm24/task1.c124
-rw-r--r--testsuites/tmtests/tm24/tm24.doc13
-rw-r--r--testsuites/tmtests/tm25/system.h43
-rw-r--r--testsuites/tmtests/tm25/task1.c109
-rw-r--r--testsuites/tmtests/tm25/tm25.doc13
-rw-r--r--testsuites/tmtests/tm26/fptest.h165
-rw-r--r--testsuites/tmtests/tm26/system.h43
-rw-r--r--testsuites/tmtests/tm26/task1.c550
-rw-r--r--testsuites/tmtests/tm26/tm26.doc13
-rw-r--r--testsuites/tmtests/tm27/system.h42
-rw-r--r--testsuites/tmtests/tm27/task1.c272
-rw-r--r--testsuites/tmtests/tm27/tm27.doc13
-rw-r--r--testsuites/tmtests/tm28/system.h43
-rw-r--r--testsuites/tmtests/tm28/task1.c134
-rw-r--r--testsuites/tmtests/tm28/tm28.doc13
-rw-r--r--testsuites/tmtests/tm29/system.h43
-rw-r--r--testsuites/tmtests/tm29/task1.c207
-rw-r--r--testsuites/tmtests/tm29/tm29.doc13
-rw-r--r--testsuites/tmtests/tmck/system.h42
-rw-r--r--testsuites/tmtests/tmck/task1.c180
-rw-r--r--testsuites/tmtests/tmck/tmck.doc20
-rw-r--r--testsuites/tmtests/tmoverhd/dumrtems.h255
-rw-r--r--testsuites/tmtests/tmoverhd/empty.c41
-rw-r--r--testsuites/tmtests/tmoverhd/system.h60
-rw-r--r--testsuites/tmtests/tmoverhd/testtask.c1279
-rw-r--r--testsuites/tmtests/tmoverhd/tmoverhd.doc13
98 files changed, 9733 insertions, 0 deletions
diff --git a/testsuites/tmtests/README b/testsuites/tmtests/README
new file mode 100644
index 0000000000..c27617d5a3
--- /dev/null
+++ b/testsuites/tmtests/README
@@ -0,0 +1,21 @@
+#
+# $Id$
+#
+
+This directory contains the RTEMS Timing Test Suite.
+The tests in this directory are used to measure the execution
+time of RTEMS directive and some critical internal functions.
+The results of these test are reported in the Fact Sheets
+and Supplental Manuals.
+
+These tests attempt to benchmark RTEMS as the user would. They measure
+the execution time for a directive (under various circumstances)
+from the time RTEMS is entered until it is executed. Where possible,
+the time is the average of at least 100 invocations of the directive.
+
+The accuracy of the times reported by these benchmarks is very dependent
+on the resolution of the timer being used. It is also important to
+insure that all sources of hardware interrupts are disabled during
+execution of the tests. This insures that the directive time reported
+does not include any interrupt time.
+
diff --git a/testsuites/tmtests/include/timesys.h b/testsuites/tmtests/include/timesys.h
new file mode 100644
index 0000000000..fb68ccb284
--- /dev/null
+++ b/testsuites/tmtests/include/timesys.h
@@ -0,0 +1,58 @@
+/* timesys.h
+ *
+ * This header file contains the global variables for the Time
+ * suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <tmacros.h>
+
+/*
+ * How many times a particular operation is performed while timed.
+ */
+
+#define OPERATION_COUNT 100
+#define IT_COUNT 100
+
+/* functions */
+
+#define put_time( _message, _total_time, \
+ _iterations, _loop_overhead, _overhead ) \
+ printf( \
+ "%s %d\n", \
+ (_message), \
+ (((_total_time) - (_loop_overhead)) / (_iterations)) - (_overhead) \
+ )
+
+#if defined(STACK_CHECKER_ON) || defined(RTEMS_DEBUG)
+#define Print_Warning() \
+ do { \
+ puts( \
+ "\n" \
+ "THE TIMES REPORTED BY THIS TEST INCLUDE DEBUG CODE!\n" \
+ "\n" \
+ ); \
+ } while (0)
+
+#else
+#define Print_Warning()
+#endif
+
+/* variables */
+
+TEST_EXTERN volatile rtems_unsigned32 end_time; /* ending time variable */
+TEST_EXTERN volatile rtems_unsigned32 overhead; /* loop overhead variable */
+
+TEST_EXTERN rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */
+TEST_EXTERN rtems_id Task_name[ OPERATION_COUNT+1 ]; /* array of task names */
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm01/system.h b/testsuites/tmtests/tm01/system.h
new file mode 100644
index 0000000000..25d3dede71
--- /dev/null
+++ b/testsuites/tmtests/tm01/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm01/task1.c b/testsuites/tmtests/tm01/task1.c
new file mode 100644
index 0000000000..64f5fa1f3c
--- /dev/null
+++ b/testsuites/tmtests/tm01/task1.c
@@ -0,0 +1,189 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_task Test_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 1 ***" );
+
+ Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
+ Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' );
+ Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' );
+
+ status = rtems_task_create(
+ Task_name[ 1 ],
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 1 ]
+ );
+ directive_failed( status, "rtems_task_create of TA1" );
+
+ status = rtems_task_start( Task_id[ 1 ], Test_task, 0 );
+ directive_failed( status, "rtems_task_start of TA1" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+
+}
+
+rtems_task Test_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 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_name name;
+ rtems_id smid;
+ rtems_status_code status;
+
+ 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 rtems_semaphore_create */
+
+ Timer_initialize();
+ (void) rtems_semaphore_create(
+ name,
+ OPERATION_COUNT,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_NO_PRIORITY,
+ &smid
+ );
+ end_time = Read_timer();
+ put_time(
+ "rtems_semaphore_create",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_SEMAPHORE_CREATE
+ );
+
+ /* Time one invocation of rtems_semaphore_delete */
+
+ Timer_initialize();
+ (void) rtems_semaphore_delete( smid );
+ end_time = Read_timer();
+ put_time(
+ "rtems_semaphore_delete",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_SEMAPHORE_CREATE
+ );
+
+ status = rtems_semaphore_create(
+ name,
+ OPERATION_COUNT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &smid
+ );
+
+ for ( iterations=OPERATION_COUNT ; iterations ; iterations-- ) {
+
+ Timer_initialize();
+ for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ end_time = Read_timer();
+
+ semaphore_obtain_loop_time += end_time;
+ semaphore_release_loop_time += end_time;
+
+ /* rtems_semaphore_obtain (available) */
+
+ Timer_initialize();
+ for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
+ (void) rtems_semaphore_obtain(
+ smid,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+ end_time = Read_timer();
+
+ semaphore_obtain_time += end_time;
+
+ /* rtems_semaphore_release */
+
+ Timer_initialize();
+ for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
+ (void) rtems_semaphore_release( smid );
+ end_time = Read_timer();
+
+ semaphore_release_time += end_time;
+
+ /* semaphore obtain (RTEMS_NO_WAIT) */
+ Timer_initialize();
+ for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
+ rtems_semaphore_obtain( smid, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT );
+ semaphore_obtain_no_wait_time += Read_timer();
+
+ Timer_initialize();
+ for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
+ rtems_semaphore_release( smid );
+ end_time = Read_timer();
+
+ semaphore_release_time += end_time;
+ }
+
+ put_time(
+ "rtems_semaphore_obtain: available",
+ semaphore_obtain_time,
+ OPERATION_COUNT * OPERATION_COUNT,
+ semaphore_obtain_loop_time,
+ CALLING_OVERHEAD_SEMAPHORE_OBTAIN
+ );
+
+ put_time(
+ "rtems_semaphore_obtain: not available -- NO_WAIT",
+ semaphore_obtain_no_wait_time,
+ OPERATION_COUNT * OPERATION_COUNT,
+ semaphore_obtain_loop_time,
+ CALLING_OVERHEAD_SEMAPHORE_OBTAIN
+ );
+
+ put_time(
+ "rtems_semaphore_release: no waiting tasks",
+ semaphore_release_time,
+ OPERATION_COUNT * OPERATION_COUNT * 2,
+ semaphore_release_loop_time * 2,
+ CALLING_OVERHEAD_SEMAPHORE_RELEASE
+ );
+
+ puts( "*** END OF TEST 1 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm01/tm01.doc b/testsuites/tmtests/tm01/tm01.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm01/tm01.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm02/system.h b/testsuites/tmtests/tm02/system.h
new file mode 100644
index 0000000000..9cbcf06563
--- /dev/null
+++ b/testsuites/tmtests/tm02/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_MAXIMUM_SEMAPHORES 101
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm02/task1.c b/testsuites/tmtests/tm02/task1.c
new file mode 100644
index 0000000000..5e415fa8bb
--- /dev/null
+++ b/testsuites/tmtests/tm02/task1.c
@@ -0,0 +1,158 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id High_id;
+rtems_id Low_id;
+rtems_id Semaphore_id;
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 2 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete" );
+}
+
+void test_init()
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+ rtems_task_priority priority;
+
+ priority = 5;
+
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &High_id
+ );
+ directive_failed( status, "rtems_task_create of high task" );
+
+ priority++;
+
+ status = rtems_task_start( High_id, High_task, 0 );
+ directive_failed( status, "rtems_task_start of high task" );
+
+ for ( index=2 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'M', 'I', 'D', ' ' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Low_id
+ );
+ directive_failed( status, "rtems_task_create middle" );
+
+ priority++;
+
+ status = rtems_task_start( Low_id, Middle_tasks, 0 );
+ directive_failed( status, "rtems_task_start middle" );
+ }
+
+ status = rtems_task_create(
+ rtems_build_name( 'L', 'O', 'W', ' ' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Low_id
+ );
+ directive_failed( status, "rtems_task_create low" );
+
+ status = rtems_task_start( Low_id, Low_task, 0 );
+ directive_failed( status, "rtems_task_start low" );
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'S', 'M', '1', ' '),
+ 0,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &Semaphore_id
+ );
+ directive_failed( status, "rtems_semaphore_create of SM1" );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Timer_initialize(); /* start blocking rtems_semaphore_obtain time */
+ status = rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ status = rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_obtain: not available -- caller blocks",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_SEMAPHORE_OBTAIN
+ );
+
+ puts( "*** END OF TEST 2 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm02/tm02.doc b/testsuites/tmtests/tm02/tm02.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm02/tm02.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm03/system.h b/testsuites/tmtests/tm03/system.h
new file mode 100644
index 0000000000..9cbcf06563
--- /dev/null
+++ b/testsuites/tmtests/tm03/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_MAXIMUM_SEMAPHORES 101
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm03/task1.c b/testsuites/tmtests/tm03/task1.c
new file mode 100644
index 0000000000..f4526f5a00
--- /dev/null
+++ b/testsuites/tmtests/tm03/task1.c
@@ -0,0 +1,151 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Semaphore_id;
+rtems_task test_init(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_id task_id;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 3 ***" );
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'A', '1', ' ' ),
+ 252,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of test_init" );
+
+ status = rtems_task_start( task_id, test_init, 0 );
+ directive_failed( status, "rtems_task_start of test_init" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task test_init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+ rtems_id task_id;
+ rtems_task_priority priority;
+
+ priority = 250;
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'S', 'M', '1', '\0'),
+ 0,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &Semaphore_id
+ );
+ directive_failed( status, "rtems_semaphore_create of SM1" );
+
+ for ( index = 2 ; index <= OPERATION_COUNT ; index ++ ) {
+ rtems_task_create(
+ rtems_build_name( 'M', 'I', 'D', ' ' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create middle" );
+
+ priority--;
+
+ rtems_task_start( task_id, Middle_tasks, 0 );
+ directive_failed( status, "rtems_task_start middle" );
+ }
+
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of high task" );
+
+ status = rtems_task_start( task_id, High_task, 0 );
+ directive_failed( status, "rtems_task_start of high task" );
+
+ Timer_initialize(); /* start the timer */
+ status = rtems_semaphore_release( Semaphore_id );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ status = rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ status = rtems_semaphore_release( Semaphore_id );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ status = rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_release: task readied -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_SEMAPHORE_RELEASE
+ );
+
+ puts( "*** END OF TEST 3 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm03/tm03.doc b/testsuites/tmtests/tm03/tm03.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm03/tm03.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm04/system.h b/testsuites/tmtests/tm04/system.h
new file mode 100644
index 0000000000..b984fea8b9
--- /dev/null
+++ b/testsuites/tmtests/tm04/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm04/task1.c b/testsuites/tmtests/tm04/task1.c
new file mode 100644
index 0000000000..74cccadf2b
--- /dev/null
+++ b/testsuites/tmtests/tm04/task1.c
@@ -0,0 +1,388 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Semaphore_id;
+rtems_id Task_id[OPERATION_COUNT+1];
+rtems_unsigned32 task_count;
+rtems_id Highest_id;
+
+rtems_task Low_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Restart_task(
+ rtems_task_argument argument
+);
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 4 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+
+ task_count = OPERATION_COUNT;
+
+ for ( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 10,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_NO_PREEMPT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create loop" );
+
+ status = rtems_task_start( Task_id[ index ], Low_tasks, 0 );
+ directive_failed( status, "rtems_task_start loop" );
+ }
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'S', 'M', '1', ' ' ),
+ 0,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &Semaphore_id
+ );
+ directive_failed( status, "rtems_semaphore_create of SM1" );
+}
+
+rtems_task Highest_task(
+ rtems_task_argument argument
+)
+{
+ rtems_task_priority old_priority;
+ rtems_status_code status;
+
+ if ( argument == 1 ) {
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart: blocked task -- preempts caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+
+ status = rtems_task_set_priority(
+ RTEMS_CURRENT_PRIORITY,
+ 254,
+ &old_priority
+ );
+ directive_failed( status, "rtems_task_set_priority" );
+
+ } else if ( argument == 2 ) {
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart: ready task -- preempts caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+
+ } else
+ (void) rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+ rtems_name name;
+ rtems_task_priority old_priority;
+
+ Timer_initialize();
+ (void) rtems_task_restart( Highest_id, 1 );
+ /* preempted by Higher_task */
+
+ Timer_initialize();
+ (void) rtems_task_restart( Highest_id, 2 );
+ /* preempted by Higher_task */
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ rtems_semaphore_release( Semaphore_id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_release: task readied -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_SEMAPHORE_RELEASE
+ );
+
+ name = rtems_build_name( 'T', 'I', 'M', 'E' );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_delete( Task_id[index] );
+ directive_failed( status, "rtems_task_delete" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ rtems_task_create(
+ name,
+ 10,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_NO_PREEMPT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_CREATE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ rtems_task_start( Task_id[ index ], Low_tasks, 0 );
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_start",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_START
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_delete( Task_id[ index ] );
+ directive_failed( status, "rtems_task_delete" );
+ }
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ name,
+ 250,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_NO_PREEMPT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( Task_id[ index ], Restart_task, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+
+ status = rtems_task_suspend( Task_id[ index ] );
+ directive_failed( status, "rtems_task_suspend LOOP" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_restart( Task_id[ index ], 0 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart: suspended task -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_suspend( Task_id[ index ] );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_delete( Task_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_delete: suspended task",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_DELETE
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ name,
+ 250,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( Task_id[ index ], Restart_task, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_restart( Task_id[ index ], 1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart: ready task -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_set_priority( Task_id[ index ], 5, &old_priority );
+ directive_failed( status, "rtems_task_set_priority loop" );
+ }
+
+ /* yield processor -- tasks block */
+ status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
+ directive_failed( status, "rtems_task_wake_after" );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_restart( Task_id[ index ], 1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart: blocked task -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+
+ /* yield processor -- tasks block */
+ status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
+ directive_failed( status, "rtems_task_wake_after" );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_delete( Task_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_delete: blocked task",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_DELETE
+ );
+
+ puts( "*** END OF TEST 4 ***" );
+ exit( 0 );
+}
+
+rtems_task Low_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ task_count--;
+
+ if ( task_count == 0 ) {
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', ' ', ' ' ),
+ 5,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create HI" );
+
+ status = rtems_task_start( id, High_task, 0 );
+ directive_failed( status, "rtems_task_start HI" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ 3,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Highest_id
+ );
+ directive_failed( status, "rtems_task_create HIGH" );
+
+ status = rtems_task_start( Highest_id, Highest_task, 0 );
+ directive_failed( status, "rtems_task_start HIGH" );
+
+ }
+ (void) rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
+
+rtems_task Restart_task(
+ rtems_task_argument argument
+)
+{
+ if ( argument == 1 )
+ (void) rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
diff --git a/testsuites/tmtests/tm04/tm04.doc b/testsuites/tmtests/tm04/tm04.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm04/tm04.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm05/system.h b/testsuites/tmtests/tm05/system.h
new file mode 100644
index 0000000000..9cbcf06563
--- /dev/null
+++ b/testsuites/tmtests/tm05/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_MAXIMUM_SEMAPHORES 101
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm05/task1.c b/testsuites/tmtests/tm05/task1.c
new file mode 100644
index 0000000000..46e10407bd
--- /dev/null
+++ b/testsuites/tmtests/tm05/task1.c
@@ -0,0 +1,132 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Task_id[OPERATION_COUNT+1];
+rtems_unsigned32 Task_index;
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 5 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_status_code status;
+ rtems_task_entry task_entry;
+ rtems_task_priority priority;
+ rtems_unsigned32 index;
+
+ priority = 250;
+
+ for( index = 0; index <= OPERATION_COUNT ; index++ ) {
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create loop" );
+
+ priority--;
+
+ if ( index==0 ) task_entry = Low_task;
+ else if ( index==OPERATION_COUNT ) task_entry = High_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( Task_id[ index ], task_entry, 0 );
+ directive_failed( status, "rtems_task_start loop" );
+ }
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ Timer_initialize();
+
+ (void) rtems_task_suspend( RTEMS_SELF );
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_resume: task readied -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_RESUME
+ );
+
+ puts( "*** END OF TEST 5 ***" );
+ exit( 0 );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ (void) rtems_task_suspend( RTEMS_SELF );
+
+ Task_index++;
+ (void) rtems_task_resume( Task_id[ Task_index ] );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_suspend: calling task",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_SUSPEND
+ );
+
+ Task_index = 1;
+ Timer_initialize();
+ (void) rtems_task_resume( Task_id[ Task_index ] );
+}
diff --git a/testsuites/tmtests/tm05/tm05.doc b/testsuites/tmtests/tm05/tm05.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm05/tm05.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm06/system.h b/testsuites/tmtests/tm06/system.h
new file mode 100644
index 0000000000..9cbcf06563
--- /dev/null
+++ b/testsuites/tmtests/tm06/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_MAXIMUM_SEMAPHORES 101
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm06/task1.c b/testsuites/tmtests/tm06/task1.c
new file mode 100644
index 0000000000..6edeb7a8e1
--- /dev/null
+++ b/testsuites/tmtests/tm06/task1.c
@@ -0,0 +1,162 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Task_id[ OPERATION_COUNT + 1 ];
+
+rtems_unsigned32 Task_restarted;
+
+rtems_task null_task(
+ rtems_task_argument argument
+);
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+void test_init( void );
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 6 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init( void )
+{
+ rtems_status_code status;
+ rtems_id id;
+
+ Task_restarted = OPERATION_COUNT;
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( id, Task_1, 0 );
+ directive_failed( status, "rtems_task_start" );
+}
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+
+ if ( Task_restarted == OPERATION_COUNT )
+ Timer_initialize();
+
+ Task_restarted--;
+
+ if ( Task_restarted != 0 )
+ (void) rtems_task_restart( RTEMS_SELF, 0 );
+
+ end_time = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ put_time(
+ "rtems_task_restart: calling task",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create loop" );
+
+ status = rtems_task_start( Task_id[ index ], null_task, 0 );
+ directive_failed( status, "rtems_task_start loop" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_suspend( Task_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_suspend: returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_SUSPEND
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_resume( Task_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_resume: task readied -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_RESUME
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_delete( Task_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_delete: ready task",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_RESUME
+ );
+
+ puts( "*** END OF TEST 6 ***" );
+ exit( 0 );
+}
+
+rtems_task null_task(
+ rtems_task_argument argument
+)
+{
+ while ( FOREVER )
+ ;
+}
diff --git a/testsuites/tmtests/tm06/tm06.doc b/testsuites/tmtests/tm06/tm06.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm06/tm06.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm07/system.h b/testsuites/tmtests/tm07/system.h
new file mode 100644
index 0000000000..9cbcf06563
--- /dev/null
+++ b/testsuites/tmtests/tm07/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_MAXIMUM_SEMAPHORES 101
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm07/task1.c b/testsuites/tmtests/tm07/task1.c
new file mode 100644
index 0000000000..518cc28148
--- /dev/null
+++ b/testsuites/tmtests/tm07/task1.c
@@ -0,0 +1,120 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Task_id[ OPERATION_COUNT+1 ], task_index;
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 7 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_status_code status;
+ rtems_task_priority priority;
+ rtems_task_entry task_entry;
+ rtems_unsigned32 index;
+
+ priority = 250;
+
+ for( index=0 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[index]
+ );
+ directive_failed( status, "rtems_task_create" );
+ priority--;
+
+ if ( index == 0 ) task_entry = Low_task;
+ else if ( index == OPERATION_COUNT ) task_entry = High_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( Task_id[index], task_entry, 0 );
+ directive_failed( status, "rtems_task_start" );
+ }
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ if ( argument != 0 ) {
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart: suspended task -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_RESTART
+ );
+ } else
+ (void) rtems_task_suspend( RTEMS_SELF );
+
+ puts( "*** END OF TEST 7 ***" );
+ exit( 0 );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ task_index++;
+
+ if ( argument != 0 )
+ (void) rtems_task_restart( Task_id[ task_index ], 0xffffffff );
+ else
+ (void) rtems_task_suspend( RTEMS_SELF );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ task_index = 1;
+
+ Timer_initialize();
+ (void) rtems_task_restart( Task_id[ task_index ], 0xffffffff );
+}
diff --git a/testsuites/tmtests/tm07/tm07.doc b/testsuites/tmtests/tm07/tm07.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm07/tm07.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm08/system.h b/testsuites/tmtests/tm08/system.h
new file mode 100644
index 0000000000..9cbcf06563
--- /dev/null
+++ b/testsuites/tmtests/tm08/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_MAXIMUM_SEMAPHORES 101
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm08/task1.c b/testsuites/tmtests/tm08/task1.c
new file mode 100644
index 0000000000..1b02b5e0ee
--- /dev/null
+++ b/testsuites/tmtests/tm08/task1.c
@@ -0,0 +1,255 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Test_task_id;
+
+rtems_task test_task(
+ rtems_task_argument argument
+);
+rtems_task test_task1(
+ rtems_task_argument argument
+);
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 8 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_status_code status;
+
+ status = rtems_task_create(
+ 1,
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Test_task_id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( Test_task_id, test_task, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_create(
+ 1,
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Test_task_id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( Test_task_id, test_task1, 0 );
+ directive_failed( status, "rtems_task_start" );
+}
+
+rtems_task test_task(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+ rtems_task_priority old_priority;
+ rtems_time_of_day time;
+ rtems_unsigned32 old_note;
+ rtems_unsigned32 old_mode;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_set_priority(
+ Test_task_id,
+ RTEMS_CURRENT_PRIORITY,
+ &old_priority
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_set_priority: obtain current priority",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_SET_PRIORITY
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_set_priority( Test_task_id, 253, &old_priority );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_set_priority: returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_SET_PRIORITY
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_mode(
+ RTEMS_CURRENT_MODE,
+ RTEMS_CURRENT_MODE,
+ &old_mode
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_mode: obtain current mode",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_MODE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ (void) rtems_task_mode(
+ RTEMS_INTERRUPT_LEVEL(1),
+ RTEMS_INTERRUPT_MASK,
+ &old_mode
+ );
+ (void) rtems_task_mode(
+ RTEMS_INTERRUPT_LEVEL(0),
+ RTEMS_INTERRUPT_MASK,
+ &old_mode
+ );
+ }
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_mode: no reschedule",
+ end_time,
+ OPERATION_COUNT * 2,
+ overhead,
+ CALLING_OVERHEAD_TASK_MODE
+ );
+
+ Timer_initialize(); /* must be one host */
+ (void) rtems_task_mode( RTEMS_NO_ASR, RTEMS_ASR_MASK, &old_mode );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_mode: reschedule -- returns to caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_TASK_MODE
+ );
+
+ status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode );
+ directive_failed( status, "rtems_task_mode" );
+
+ status = rtems_task_set_priority( Test_task_id, 1, &old_priority );
+ directive_failed( status, "rtems_task_set_priority" );
+
+ /* preempted by test_task1 */
+ Timer_initialize();
+ (void) rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_set_note( Test_task_id, 8, 10 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_set_note",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_SET_NOTE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_get_note( Test_task_id, 8, &old_note );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_get_note",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_GET_NOTE
+ );
+
+ build_time( &time, 1, 1, 1988, 0, 0, 0, 0 );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_clock_set( &time );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_clock_set",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_CLOCK_SET
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_clock_get",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_CLOCK_GET
+ );
+
+ puts( "*** END OF TEST 8 ***" );
+ exit( 0 );
+}
+
+rtems_task test_task1(
+ rtems_task_argument argument
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_mode: reschedule -- preempts caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_TASK_MODE
+ );
+
+ (void) rtems_task_suspend( RTEMS_SELF );
+}
diff --git a/testsuites/tmtests/tm08/tm08.doc b/testsuites/tmtests/tm08/tm08.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm08/tm08.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm09/system.h b/testsuites/tmtests/tm09/system.h
new file mode 100644
index 0000000000..4db3a16eea
--- /dev/null
+++ b/testsuites/tmtests/tm09/system.h
@@ -0,0 +1,42 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm09/task1.c b/testsuites/tmtests/tm09/task1.c
new file mode 100644
index 0000000000..90d454b3d4
--- /dev/null
+++ b/testsuites/tmtests/tm09/task1.c
@@ -0,0 +1,226 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+
+rtems_task Test_task(
+ rtems_task_argument argument
+);
+void queue_test();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 9 ***" );
+
+ status = rtems_task_create(
+ 1,
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 1 ]
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( Task_id[ 1 ], Test_task, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Test_task (
+ rtems_task_argument argument
+)
+{
+ Timer_initialize();
+ rtems_message_queue_create(
+ 1,
+ OPERATION_COUNT,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_create",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_CREATE
+ );
+
+ queue_test();
+
+ Timer_initialize();
+ rtems_message_queue_delete( Queue_id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_delete",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_DELETE
+ );
+
+ puts( "*** END OF TEST 9 ***" );
+ exit( 0 );
+}
+
+void queue_test()
+{
+ rtems_unsigned32 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 empty_flush_count;
+ rtems_unsigned32 flush_count;
+ rtems_unsigned32 index;
+ rtems_unsigned32 iterations;
+ long buffer[4];
+ rtems_status_code status;
+ rtems_unsigned32 size;
+
+ 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;
+
+ for ( iterations = 1 ; iterations <= OPERATION_COUNT ; iterations++ ) {
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ send_loop_time += Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ urgent_loop_time += Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ receive_loop_time += Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_send( Queue_id, (long (*)[4])buffer, 16 );
+ send_time += Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4])buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+ receive_time += Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_urgent( Queue_id, (long (*)[4])buffer, 16 );
+ urgent_time += Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4])buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+ receive_time += Read_timer();
+
+ Timer_initialize();
+ rtems_message_queue_flush( Queue_id, &empty_flush_count );
+ empty_flush_time += Read_timer();
+
+ /* send one message to flush */
+ status = rtems_message_queue_send(
+ Queue_id,
+ (long (*)[4])buffer,
+ 16
+ );
+ directive_failed( status, "rtems_message_queue_send" );
+
+ Timer_initialize();
+ rtems_message_queue_flush( Queue_id, &flush_count );
+ flush_time += Read_timer();
+ }
+
+ put_time(
+ "rtems_message_queue_send: no waiting tasks",
+ send_time,
+ OPERATION_COUNT * OPERATION_COUNT,
+ send_loop_time,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_SEND
+ );
+
+ put_time(
+ "rtems_message_queue_urgent: no waiting tasks",
+ urgent_time,
+ OPERATION_COUNT * OPERATION_COUNT,
+ urgent_loop_time,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_URGENT
+ );
+
+ put_time(
+ "rtems_message_queue_receive: available",
+ receive_time,
+ OPERATION_COUNT * OPERATION_COUNT * 2,
+ receive_loop_time * 2,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
+ );
+
+ put_time(
+ "rtems_message_queue_flush: no messages flushed",
+ empty_flush_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_FLUSH
+ );
+
+ put_time(
+ "rtems_message_queue_flush: messages flushed",
+ flush_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_FLUSH
+ );
+
+}
diff --git a/testsuites/tmtests/tm09/tm09.doc b/testsuites/tmtests/tm09/tm09.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm09/tm09.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm10/system.h b/testsuites/tmtests/tm10/system.h
new file mode 100644
index 0000000000..f16004b87b
--- /dev/null
+++ b/testsuites/tmtests/tm10/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 110
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm10/task1.c b/testsuites/tmtests/tm10/task1.c
new file mode 100644
index 0000000000..7cb30f1c33
--- /dev/null
+++ b/testsuites/tmtests/tm10/task1.c
@@ -0,0 +1,165 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+long Buffer[4];
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 10 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_unsigned32 index;
+ rtems_unsigned32 size;
+ rtems_task_entry task_entry;
+ rtems_status_code status;
+ rtems_task_priority priority;
+ rtems_id task_id;
+
+ priority = 5;
+
+ for( index = 0; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ priority++;
+
+ if ( index==0 ) task_entry = High_task;
+ else if ( index==OPERATION_COUNT ) task_entry = Low_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( task_id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ status = rtems_message_queue_create(
+ 1,
+ OPERATION_COUNT,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_NO_WAIT,
+ RTEMS_NO_TIMEOUT
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_receive: not available -- NO_WAIT",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
+ );
+
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ Timer_initialize();
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
+
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_receive: not available -- caller blocks",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
+ );
+
+ puts( "*** END OF TEST 10 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm10/tm10.doc b/testsuites/tmtests/tm10/tm10.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm10/tm10.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm11/system.h b/testsuites/tmtests/tm11/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm11/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm11/task1.c b/testsuites/tmtests/tm11/task1.c
new file mode 100644
index 0000000000..a255c7cf2e
--- /dev/null
+++ b/testsuites/tmtests/tm11/task1.c
@@ -0,0 +1,155 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+
+long Buffer[4];
+
+rtems_task test_init(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+
+void Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_id id;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 11 ***" );
+
+ status = rtems_task_create(
+ 1,
+ 251,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( id, test_init, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task test_init(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_task_entry task_entry;
+ rtems_task_priority priority;
+ rtems_id task_id;
+ rtems_status_code status;
+
+/* As each task is started, it preempts this task and
+ * performs a blocking rtems_message_queue_receive. Upon completion of
+ * this loop all created tasks are blocked.
+ */
+
+ status = rtems_message_queue_create(
+ rtems_build_name( 'M', 'Q', '1', ' ' ),
+ OPERATION_COUNT,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ priority = 250;
+
+ for( index = 0; index < OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ priority--;
+
+ if ( index==OPERATION_COUNT-1 ) task_entry = High_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( task_id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ Timer_initialize();
+ (void) rtems_message_queue_send( Queue_id, (long (*)[4]) Buffer, 16 );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ (void) rtems_message_queue_send( Queue_id, (long (*)[4]) Buffer, size );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_send: task readied -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_SEND
+ );
+
+ puts( "*** END OF TEST 11 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm11/tm11.doc b/testsuites/tmtests/tm11/tm11.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm11/tm11.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm12/system.h b/testsuites/tmtests/tm12/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm12/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm12/task1.c b/testsuites/tmtests/tm12/task1.c
new file mode 100644
index 0000000000..d36f90a253
--- /dev/null
+++ b/testsuites/tmtests/tm12/task1.c
@@ -0,0 +1,146 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+
+long Buffer[4];
+
+rtems_task test_init(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Low_tasks(
+ rtems_task_argument argument
+);
+
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id task_id;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 12 ***" );
+
+ status = rtems_task_create(
+ 1,
+ 251,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( task_id, test_init, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task test_init(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_task_entry task_entry;
+ rtems_task_priority priority;
+ rtems_id task_id;
+ rtems_status_code status;
+
+
+ status = rtems_message_queue_create(
+ rtems_build_name( 'M', 'Q', '1', ' ' ),
+ OPERATION_COUNT,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ priority = 250;
+
+ for( index = 0; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ priority--;
+
+ if ( index==OPERATION_COUNT ) task_entry = High_task;
+ else task_entry = Low_tasks;
+
+ status = rtems_task_start( task_id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_send( Queue_id, (long (*)[4]) Buffer, 16 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_send: task readied -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_SEND
+ );
+
+ puts( "*** END OF TEST 12 ***" );
+ exit( 0 );
+}
+
+rtems_task Low_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
diff --git a/testsuites/tmtests/tm12/tm12.doc b/testsuites/tmtests/tm12/tm12.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm12/tm12.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm13/system.h b/testsuites/tmtests/tm13/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm13/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm13/task1.c b/testsuites/tmtests/tm13/task1.c
new file mode 100644
index 0000000000..b32f323064
--- /dev/null
+++ b/testsuites/tmtests/tm13/task1.c
@@ -0,0 +1,154 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+
+long Buffer[4];
+
+rtems_task test_init(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+void Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_id id;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 13 ***" );
+
+ status = rtems_task_create(
+ 1,
+ 251,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( id, test_init, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task test_init(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_task_entry task_entry;
+ rtems_task_priority priority;
+ rtems_id task_id;
+ rtems_status_code status;
+
+/* As each task is started, it preempts this task and
+ * performs a blocking rtems_message_queue_receive. Upon completion of
+ * this loop all created tasks are blocked.
+ */
+
+ status = rtems_message_queue_create(
+ rtems_build_name( 'M', 'Q', '1', ' ' ),
+ OPERATION_COUNT,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ priority = 250;
+
+ for( index = 0; index < OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ priority--;
+
+ if ( index==OPERATION_COUNT-1 ) task_entry = High_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( task_id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ Timer_initialize();
+ (void) rtems_message_queue_urgent( Queue_id, (long (*)[4]) Buffer, 16 );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ (void) rtems_message_queue_urgent( Queue_id, (long (*)[4]) Buffer, size );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_urgent: task readied -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_URGENT
+ );
+
+ puts( "*** END OF TEST 13 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm13/tm13.doc b/testsuites/tmtests/tm13/tm13.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm13/tm13.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm14/system.h b/testsuites/tmtests/tm14/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm14/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm14/task1.c b/testsuites/tmtests/tm14/task1.c
new file mode 100644
index 0000000000..39dfd85c31
--- /dev/null
+++ b/testsuites/tmtests/tm14/task1.c
@@ -0,0 +1,146 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+
+long Buffer[4];
+
+rtems_task test_init(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Low_tasks(
+ rtems_task_argument argument
+);
+
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id task_id;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 14 ***" );
+
+ status = rtems_task_create(
+ 1,
+ 251,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( task_id, test_init, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task test_init(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_task_entry task_entry;
+ rtems_task_priority priority;
+ rtems_id task_id;
+ rtems_status_code status;
+
+
+ status = rtems_message_queue_create(
+ rtems_build_name( 'M', 'Q', '1', ' ' ),
+ OPERATION_COUNT,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ priority = 250;
+
+ for( index = 0; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ priority--;
+
+ if ( index==OPERATION_COUNT ) task_entry = High_task;
+ else task_entry = Low_tasks;
+
+ status = rtems_task_start( task_id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_urgent( Queue_id, (long (*)[4]) Buffer, 16 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_urgent: task readied -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_URGENT
+ );
+
+ puts( "*** END OF TEST 14 ***" );
+ exit( 0 );
+}
+
+rtems_task Low_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 size;
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+}
diff --git a/testsuites/tmtests/tm14/tm14.doc b/testsuites/tmtests/tm14/tm14.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm14/tm14.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm15/system.h b/testsuites/tmtests/tm15/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm15/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm15/task1.c b/testsuites/tmtests/tm15/task1.c
new file mode 100644
index 0000000000..85cb8d2e4d
--- /dev/null
+++ b/testsuites/tmtests/tm15/task1.c
@@ -0,0 +1,222 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned32 time_set, eventout;
+
+rtems_task High_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 15 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_id id;
+ rtems_unsigned32 index;
+ rtems_event_set event_out;
+ rtems_status_code status;
+
+ time_set = FALSE;
+
+ status = rtems_task_create(
+ rtems_build_name( 'L', 'O', 'W', ' ' ),
+ 10,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_NO_PREEMPT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create LOW" );
+
+ status = rtems_task_start( id, Low_task, 0 );
+ directive_failed( status, "rtems_task_start LOW" );
+
+ for ( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ 5,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( Task_id[ index ], High_tasks, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ {
+ (void) rtems_event_receive(
+ RTEMS_PENDING_EVENTS,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &event_out
+ );
+ }
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_receive: obtain current events",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_EVENT_RECEIVE
+ );
+
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ {
+ (void) rtems_event_receive(
+ RTEMS_ALL_EVENTS,
+ RTEMS_NO_WAIT,
+ RTEMS_NO_TIMEOUT,
+ &event_out
+ );
+ }
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_receive: not available -- NO_WAIT",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_EVENT_RECEIVE
+ );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_event_set event_out;
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_receive: not available -- caller blocks",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_EVENT_RECEIVE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_event_send( RTEMS_SELF, RTEMS_EVENT_16 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_send: no task readied",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_EVENT_SEND
+ );
+
+ Timer_initialize();
+ (void) rtems_event_receive(
+ RTEMS_EVENT_16,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &event_out
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_receive: available",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_EVENT_RECEIVE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_event_send( Task_id[ index ], RTEMS_EVENT_16 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_send: task readied -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_EVENT_SEND
+ );
+
+ puts( "*** END OF TEST 15 ***" );
+ exit( 0 );
+}
+
+rtems_task High_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ if ( time_set )
+ status = rtems_event_receive(
+ RTEMS_EVENT_16,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &eventout
+ );
+ else {
+ time_set = 1;
+ Timer_initialize(); /* start blocking rtems_event_receive time */
+ status = rtems_event_receive(
+ RTEMS_EVENT_16,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &eventout
+ );
+ }
+}
diff --git a/testsuites/tmtests/tm15/tm15.doc b/testsuites/tmtests/tm15/tm15.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm15/tm15.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm16/system.h b/testsuites/tmtests/tm16/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm16/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm16/task1.c b/testsuites/tmtests/tm16/task1.c
new file mode 100644
index 0000000000..142512c053
--- /dev/null
+++ b/testsuites/tmtests/tm16/task1.c
@@ -0,0 +1,148 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned32 Task_count;
+
+rtems_task test_init(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 16 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'E', 'S', 'T' ),
+ 251,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create of test_init" );
+
+ status = rtems_task_start( id, test_init, 0 );
+ directive_failed( status, "rtems_task_start of test_init" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task test_init(
+ rtems_task_argument argument
+)
+{
+ rtems_task_priority priority;
+ rtems_status_code status;
+ rtems_unsigned32 index;
+ rtems_task_entry task_entry;
+
+/* As each task is started, it preempts this task and
+ * performs a blocking rtems_event_receive. Upon completion of
+ * this loop all created tasks are blocked.
+ */
+
+ priority = 250;
+
+ for( index = 0 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'M', 'I', 'D', ' ' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ if ( index == OPERATION_COUNT ) task_entry = High_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( Task_id[ index ], task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+
+ priority--;
+ }
+
+ Task_count = 0;
+
+ Timer_initialize();
+ (void) rtems_event_send( Task_id[ Task_count ], RTEMS_EVENT_16 );
+ /* preempts task */
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_event_set event_out;
+
+ (void) rtems_event_receive( /* task blocks */
+ RTEMS_EVENT_16,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &event_out
+ );
+
+ Task_count++;
+
+ (void) rtems_event_send( /* preempts task */
+ Task_id[ Task_count ],
+ RTEMS_EVENT_16
+ );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_event_set event_out;
+
+ (void) rtems_event_receive( /* task blocks */
+ RTEMS_EVENT_16,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &event_out
+ );
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_send: task readied -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_EVENT_SEND
+ );
+
+ puts( "*** END OF TEST 16 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm16/tm16.doc b/testsuites/tmtests/tm16/tm16.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm16/tm16.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm17/system.h b/testsuites/tmtests/tm17/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm17/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm17/task1.c b/testsuites/tmtests/tm17/task1.c
new file mode 100644
index 0000000000..e7cbc8052f
--- /dev/null
+++ b/testsuites/tmtests/tm17/task1.c
@@ -0,0 +1,127 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned32 Task_count;
+rtems_task_priority Task_priority;
+
+rtems_task First_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Last_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_task_entry task_entry;
+ rtems_unsigned32 index;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 17 ***" );
+
+ Task_priority = 254;
+
+ for( index = 0; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ Task_priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ index ]
+ );
+ directive_failed( status, "rtems_task_create loop" );
+
+ if ( index == OPERATION_COUNT ) task_entry = Last_task;
+ else if ( index == 0 ) task_entry = First_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( Task_id[ index ], task_entry, 0 );
+ directive_failed( status, "rtems_task_start loop" );
+ }
+
+ Task_count = 1;
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task First_task(
+ rtems_task_argument argument
+)
+{
+ rtems_task_priority previous_priority;
+
+ Timer_initialize();
+
+ Task_priority--;
+ Task_count++;
+
+ (void) rtems_task_set_priority(
+ Task_id[ Task_count ],
+ Task_priority,
+ &previous_priority
+ );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_task_priority previous_priority;
+
+ Task_priority--;
+ Task_count++;
+
+ (void) rtems_task_set_priority(
+ Task_id[ Task_count ],
+ Task_priority,
+ &previous_priority
+ );
+}
+
+rtems_task Last_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+
+ end_time = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ put_time(
+ "rtems_task_set_priority: preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_SET_PRIORITY
+ );
+
+ puts( "*** END OF TEST 17 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm17/tm17.doc b/testsuites/tmtests/tm17/tm17.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm17/tm17.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm18/system.h b/testsuites/tmtests/tm18/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm18/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm18/task1.c b/testsuites/tmtests/tm18/task1.c
new file mode 100644
index 0000000000..f7a877d7ca
--- /dev/null
+++ b/testsuites/tmtests/tm18/task1.c
@@ -0,0 +1,112 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned32 taskcount;
+rtems_task_priority taskpri;
+
+rtems_task First_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Last_task(
+ rtems_task_argument argument
+);
+
+
+void test_init();
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 18 ***" );
+
+ test_init();
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void test_init()
+{
+ rtems_id id;
+ rtems_task_entry task_entry;
+ rtems_unsigned32 index;
+ rtems_status_code status;
+
+ for ( index = 0 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create loop" );
+
+ if ( index == OPERATION_COUNT ) task_entry = Last_task;
+ else if ( index == 0 ) task_entry = First_task;
+ else task_entry = Middle_tasks;
+
+
+ status = rtems_task_start( id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start loop" );
+ }
+
+}
+
+rtems_task First_task(
+ rtems_task_argument argument
+)
+{
+ Timer_initialize();
+
+ (void) rtems_task_delete( RTEMS_SELF );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ (void) rtems_task_delete( RTEMS_SELF );
+}
+
+rtems_task Last_task(
+ rtems_task_argument argument
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_delete: calling task",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_DELETE
+ );
+
+ puts( "*** END OF TEST 18 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm18/tm18.doc b/testsuites/tmtests/tm18/tm18.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm18/tm18.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm19/system.h b/testsuites/tmtests/tm19/system.h
new file mode 100644
index 0000000000..e5e553ff19
--- /dev/null
+++ b/testsuites/tmtests/tm19/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm19/task1.c b/testsuites/tmtests/tm19/task1.c
new file mode 100644
index 0000000000..6c503531f1
--- /dev/null
+++ b/testsuites/tmtests/tm19/task1.c
@@ -0,0 +1,208 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_asr Process_asr_for_pass_1(
+ rtems_signal_set signals
+);
+
+rtems_asr Process_asr_for_pass_2(
+ rtems_signal_set signals
+);
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+rtems_task Task_2(
+ rtems_task_argument argument
+);
+
+rtems_task Task_3(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 19 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 1 ]
+ );
+ directive_failed( status, "rtems_task_create of TASK1" );
+
+ status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
+ directive_failed( status, "rtems_task_start of TASK1" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 127,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 2 ]
+ );
+ directive_failed( status, "rtems_task_create of TASK2" );
+
+ status = rtems_task_start( Task_id[ 2 ], Task_2, 0 );
+ directive_failed( status, "rtems_task_start of TASK2" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 126,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 3 ]
+ );
+ directive_failed( status, "rtems_task_create of TASK3" );
+
+ status = rtems_task_start( Task_id[ 3 ], Task_3, 0 );
+ directive_failed( status, "rtems_task_start of TASK3" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_asr Process_asr_for_pass_1(
+ rtems_signal_set signals
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_signal_send: signal to self",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_SIGNAL_SEND
+ );
+
+ Timer_initialize();
+}
+
+rtems_asr Process_asr_for_pass_2(
+ rtems_signal_set signals
+)
+{
+ rtems_status_code status;
+
+ status = rtems_task_resume( Task_id[ 3 ] );
+ directive_failed( status, "rtems_task_resume" );
+
+ Timer_initialize();
+}
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Timer_initialize();
+ (void) rtems_signal_catch( Process_asr_for_pass_1, RTEMS_DEFAULT_MODES );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_signal_catch",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_SIGNAL_CATCH
+ );
+
+ Timer_initialize();
+ rtems_signal_send( Task_id[ 2 ], 1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_signal_send: returns to caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_SIGNAL_SEND
+ );
+
+ Timer_initialize();
+ (void) rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_1 );
+
+ /* end time is done is RTEMS_ASR */
+
+ end_time = Read_timer();
+
+ put_time(
+ "exit ASR overhead: returns to calling task",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ status = rtems_signal_catch( Process_asr_for_pass_2, RTEMS_NO_PREEMPT );
+ directive_failed( status, "rtems_signal_catch" );
+
+ Timer_initialize();
+ (void) rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_1 );
+}
+
+rtems_asr Process_asr_for_task_2(
+ rtems_signal_set signals
+)
+{
+ ;
+}
+
+rtems_task Task_2(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ status = rtems_signal_catch( Process_asr_for_task_2, RTEMS_DEFAULT_MODES );
+ directive_failed( status, "rtems_signal_catch" );
+
+ (void) rtems_task_suspend( RTEMS_SELF );
+}
+
+rtems_task Task_3(
+ rtems_task_argument argument
+)
+{
+ (void) rtems_task_suspend( RTEMS_SELF );
+
+ end_time = Read_timer();
+
+ put_time(
+ "exit ASR overhead: returns to preempting task",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ puts( "*** END OF TEST 19 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm19/tm19.doc b/testsuites/tmtests/tm19/tm19.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm19/tm19.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm20/system.h b/testsuites/tmtests/tm20/system.h
new file mode 100644
index 0000000000..54be275388
--- /dev/null
+++ b/testsuites/tmtests/tm20/system.h
@@ -0,0 +1,44 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+#define CONFIGURE_TEST_NEEDS_STUB_DRIVER
+
+#define CONFIGURE_MAXIMUM_PARTITIONS 1
+#define CONFIGURE_MAXIMUM_REGIONS 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm20/task1.c b/testsuites/tmtests/tm20/task1.c
new file mode 100644
index 0000000000..62d9d9a261
--- /dev/null
+++ b/testsuites/tmtests/tm20/task1.c
@@ -0,0 +1,466 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_device_major_number _STUB_major = 1;
+
+rtems_id Region_id;
+rtems_name Region_name;
+rtems_unsigned8 Region_area[ 2048 ] CPU_STRUCTURE_ALIGNMENT;
+
+rtems_id Partition_id;
+rtems_name Partition_name;
+rtems_unsigned8 Partition_area[ 2048 ] CPU_STRUCTURE_ALIGNMENT;
+
+void *Buffer_address_1;
+void *Buffer_address_2;
+void *Buffer_address_3;
+void *Buffer_address_4;
+
+rtems_unsigned32 buffer_count;
+
+void *Buffer_addresses[ OPERATION_COUNT+1 ];
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+rtems_task Task_2(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 20 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', '1' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 1 ]
+ );
+ directive_failed( status, "rtems_task_create of TASK1" );
+
+ status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
+ directive_failed( status, "rtems_task_start of TASK1" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', '2' ),
+ 129,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 2 ]
+ );
+ directive_failed( status, "rtems_task_create of TASK2" );
+
+ status = rtems_task_start( Task_id[ 2 ], Task_2, 0 );
+ directive_failed( status, "rtems_task_start of TASK2" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_mode previous_mode;
+ rtems_task_priority previous_priority;
+ rtems_status_code status;
+
+ Partition_name = rtems_build_name( 'P', 'A', 'R', 'T' );
+
+ Timer_initialize();
+ rtems_partition_create(
+ Partition_name,
+ Partition_area,
+ 2048,
+ 128,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Partition_id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_create",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PARTITION_CREATE
+ );
+
+ Region_name = rtems_build_name( 'R', 'E', 'G', 'N' );
+
+ Timer_initialize();
+ rtems_region_create(
+ Region_name,
+ Region_area,
+ 2048,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Region_id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_create",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_CREATE
+ );
+
+ Timer_initialize();
+ (void) rtems_partition_get_buffer( Partition_id, &Buffer_address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_get_buffer: available",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PARTITION_GET_BUFFER
+ );
+
+ buffer_count = 0;
+ while ( FOREVER ) {
+
+ status = rtems_partition_get_buffer(
+ Partition_id,
+ &Buffer_addresses[ buffer_count ]
+ );
+
+ if ( status == RTEMS_UNSATISFIED ) break;
+
+ buffer_count++;
+ }
+
+ Timer_initialize();
+ (void) rtems_partition_get_buffer( Partition_id, &Buffer_address_2 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_get_buffer: not available",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PARTITION_GET_BUFFER
+ );
+
+ Timer_initialize();
+ (void) rtems_partition_return_buffer( Partition_id, Buffer_address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_return_buffer",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PARTITION_RETURN_BUFFER
+ );
+
+ for ( index = 0 ; index < buffer_count ; index++ ) {
+
+ status = rtems_partition_return_buffer(
+ Partition_id,
+ Buffer_addresses[ index ]
+ );
+ directive_failed( status, "rtems_partition_return_buffer" );
+
+ }
+
+ Timer_initialize();
+ (void) rtems_partition_delete( Partition_id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_delete",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PARTITION_DELETE
+ );
+
+ status = rtems_region_get_segment(
+ Region_id,
+ 400,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_2
+ );
+ directive_failed( status, "region_get_semgent" );
+
+ Timer_initialize();
+ (void) rtems_region_get_segment(
+ Region_id,
+ 400,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_3
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_get_segment: available",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_GET_SEGMENT
+ );
+
+ Timer_initialize();
+ (void) rtems_region_get_segment(
+ Region_id,
+ 1998,
+ RTEMS_NO_WAIT,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_4
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_get_segment: not available -- NO_WAIT",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_GET_SEGMENT
+ );
+
+ status = rtems_region_return_segment( Region_id, Buffer_address_3 );
+ directive_failed( status, "rtems_region_return_segment" );
+
+ Timer_initialize();
+ (void) rtems_region_return_segment( Region_id, Buffer_address_2 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_return_segment: no waiting tasks",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_RETURN_SEGMENT
+ );
+
+ status = rtems_region_get_segment(
+ Region_id,
+ 400,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_1
+ );
+ directive_failed( status, "rtems_region_get_segment" );
+
+ Timer_initialize();
+ (void) rtems_region_get_segment(
+ Region_id,
+ 1998,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_2
+ );
+
+ /* execute Task_2 */
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_return_segment: task readied -- preempts caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_RETURN_SEGMENT
+ );
+
+ status = rtems_region_return_segment( Region_id, Buffer_address_2 );
+ directive_failed( status, "rtems_region_return_segment" );
+
+ status = rtems_task_mode(
+ RTEMS_NO_PREEMPT,
+ RTEMS_PREEMPT_MASK,
+ &previous_mode
+ );
+ directive_failed( status, "rtems_task_mode" );
+
+ status = rtems_task_set_priority( RTEMS_SELF, 254, &previous_priority );
+ directive_failed( status, "rtems_task_set_priority" );
+
+ status = rtems_region_get_segment(
+ Region_id,
+ 400,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_1
+ );
+ directive_failed( status, "rtems_region_return_segment" );
+
+ status = rtems_region_get_segment(
+ Region_id,
+ 1998,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT,
+ &Buffer_address_2
+ );
+ directive_failed( status, "rtems_region_get_segment" );
+
+ /* execute Task_2 */
+
+ status = rtems_region_return_segment( Region_id, Buffer_address_2 );
+ directive_failed( status, "rtems_region_return_segment" );
+
+ Timer_initialize();
+ (void) rtems_region_delete( Region_id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_delete",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_DELETE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_io_initialize( _STUB_major, 0, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_initialize",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_IO_INITIALIZE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_io_open( _STUB_major, 0, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_open",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_IO_OPEN
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_io_close( _STUB_major, 0, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_close",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_IO_CLOSE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_io_read( _STUB_major, 0, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_read",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_IO_READ
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_io_write( _STUB_major, 0, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_write",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_IO_WRITE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_io_control( _STUB_major, 0, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_control",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_IO_CONTROL
+ );
+
+ puts( "*** END OF TEST 20 ***" );
+ exit( 0 );
+}
+
+rtems_task Task_2(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_get_segment: not available -- caller blocks",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_GET_SEGMENT
+ );
+
+ Timer_initialize();
+ (void) rtems_region_return_segment( Region_id, Buffer_address_1 );
+
+ /* preempt back to Task_1 */
+
+ Timer_initialize();
+ (void) rtems_region_return_segment( Region_id, Buffer_address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_return_segment: task readied -- returns to caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_REGION_RETURN_SEGMENT
+ );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
diff --git a/testsuites/tmtests/tm20/tm20.doc b/testsuites/tmtests/tm20/tm20.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm20/tm20.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm21/system.h b/testsuites/tmtests/tm21/system.h
new file mode 100644
index 0000000000..4dd9ff035b
--- /dev/null
+++ b/testsuites/tmtests/tm21/system.h
@@ -0,0 +1,50 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 102
+#define CONFIGURE_MAXIMUM_TIMERS 100
+#define CONFIGURE_MAXIMUM_SEMAPHORES 100
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 100
+#define CONFIGURE_MAXIMUM_PARTITIONS 100
+#define CONFIGURE_MAXIMUM_REGIONS 100
+#define CONFIGURE_MAXIMUM_PORTS 100
+#define CONFIGURE_MAXIMUM_PERIODS 100
+
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm21/task1.c b/testsuites/tmtests/tm21/task1.c
new file mode 100644
index 0000000000..29184daecf
--- /dev/null
+++ b/testsuites/tmtests/tm21/task1.c
@@ -0,0 +1,236 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned8 Region_area[ 2048 ] CPU_STRUCTURE_ALIGNMENT;
+rtems_unsigned8 Partition_area[ 2048 ] CPU_STRUCTURE_ALIGNMENT;
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 21 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 250,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create of TASK1" );
+
+ status = rtems_task_start( id, Task_1, 0 );
+ directive_failed( status, "rtems_task_start of TASK1" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_id id;
+ rtems_status_code status;
+
+ for( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create (
+ index,
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_message_queue_create(
+ index,
+ 1, /* only going to ident this queue */
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ status = rtems_semaphore_create(
+ index,
+ OPERATION_COUNT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &id
+ );
+ directive_failed( status, "rtems_semaphore_create" );
+
+ status = rtems_region_create(
+ index,
+ Region_area,
+ 2048,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_region_create" );
+
+ status = rtems_partition_create(
+ index,
+ Partition_area,
+ 2048,
+ 128,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_partition_create" );
+
+ status = rtems_port_create(
+ index,
+ Partition_area,
+ Region_area,
+ 0xff,
+ &id
+ );
+ directive_failed( status, "rtems_port_create" );
+
+ status = rtems_timer_create( index, &id );
+ directive_failed( status, "rtems_timer_create" );
+
+ status = rtems_rate_monotonic_create( index, &id );
+ directive_failed( status, "rtems_rate_monotonic_create" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_ident( index, RTEMS_SEARCH_ALL_NODES, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_ident( index, RTEMS_SEARCH_ALL_NODES, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_semaphore_ident( index, RTEMS_SEARCH_ALL_NODES, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_SEMAPHORE_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_partition_ident( index, RTEMS_SEARCH_ALL_NODES, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_PARTITION_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_region_ident( index, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_REGION_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_port_ident( index, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_PORT_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_ident( index, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_IDENT
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_rate_monotonic_ident( index, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_RATE_MONOTONIC_IDENT
+ );
+
+ puts( "*** END OF TEST 21 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm21/tm21.doc b/testsuites/tmtests/tm21/tm21.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm21/tm21.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm22/system.h b/testsuites/tmtests/tm22/system.h
new file mode 100644
index 0000000000..a91f3af44f
--- /dev/null
+++ b/testsuites/tmtests/tm22/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 103
+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm22/task1.c b/testsuites/tmtests/tm22/task1.c
new file mode 100644
index 0000000000..ed71c734b8
--- /dev/null
+++ b/testsuites/tmtests/tm22/task1.c
@@ -0,0 +1,200 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Queue_id;
+
+long Buffer[4];
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Preempt_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 22 ***" );
+
+ status = rtems_message_queue_create(
+ rtems_build_name( 'M', 'Q', '1', ' '),
+ 100,
+ 16,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Queue_id
+ );
+ directive_failed( status, "rtems_message_queue_create" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'L', 'O', 'W', ' ' ),
+ 10,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_NO_PREEMPT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( id, Low_task, 0 );
+ directive_failed( status, "rtems_task_start LOW" );
+
+ status = rtems_task_create(
+ 1,
+ 11,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create RTEMS_PREEMPT" );
+
+ status = rtems_task_start( id, Preempt_task, 0 );
+ directive_failed( status, "rtems_task_start RTEMS_PREEMPT" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 count;
+ rtems_status_code status;
+
+ Timer_initialize();
+ (void) rtems_message_queue_broadcast(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ 16,
+ &count
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_broadcast: task readied -- returns to caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST
+ );
+
+ status = rtems_task_suspend(RTEMS_SELF);
+ directive_failed( status, "rtems_task_suspend" );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_unsigned32 index;
+ rtems_unsigned32 count;
+ rtems_unsigned32 size;
+ rtems_status_code status;
+
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ 5,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_NO_PREEMPT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( id, High_task, 0 );
+ directive_failed( status, "rtems_task_start HIGH" );
+
+ status = rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+ directive_failed( status, "message_queu_receive" );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_message_queue_broadcast(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ 16,
+ &count
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_broadcast: no waiting tasks",
+ end_time,
+ OPERATION_COUNT,
+ 1,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST
+ );
+
+ (void) rtems_message_queue_receive(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ &size,
+ RTEMS_DEFAULT_OPTIONS,
+ RTEMS_NO_TIMEOUT
+ );
+
+ /* should go to Preempt_task here */
+
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_broadcast: task readied -- preempts caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST
+ );
+
+ puts( "*** END OF TEST 22 ***" );
+ exit( 0 );
+}
+
+rtems_task Preempt_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 count;
+
+ Timer_initialize();
+ (void) rtems_message_queue_broadcast(
+ Queue_id,
+ (long (*)[4]) Buffer,
+ 16,
+ &count
+ );
+
+ /* should be preempted by low task */
+}
diff --git a/testsuites/tmtests/tm22/tm22.doc b/testsuites/tmtests/tm22/tm22.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm22/tm22.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm23/system.h b/testsuites/tmtests/tm23/system.h
new file mode 100644
index 0000000000..a76f89f27d
--- /dev/null
+++ b/testsuites/tmtests/tm23/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_TIMERS 110
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm23/task1.c b/testsuites/tmtests/tm23/task1.c
new file mode 100644
index 0000000000..2ee1ae247b
--- /dev/null
+++ b/testsuites/tmtests/tm23/task1.c
@@ -0,0 +1,302 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Timer_id[ OPERATION_COUNT+1 ];
+
+rtems_time_of_day time_of_day;
+
+void null_delay(
+ rtems_id ignored_id,
+ void *ignored_address
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+
+ rtems_task_priority priority;
+ rtems_unsigned32 index;
+ rtems_id id;
+ rtems_task_entry task_entry;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 23 ***" );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ priority = 5;
+
+ for( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ if ( index == 1 ) task_entry = High_task;
+ else if ( index == OPERATION_COUNT ) task_entry = Low_task;
+ else task_entry = Middle_tasks;
+
+ status = rtems_task_start( id, task_entry, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+
+ priority++;
+ }
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+void null_delay(
+ rtems_id ignored_id,
+ void *ignored_address
+)
+{
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_status_code status;
+ int i;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_create( index, &Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_CREATE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_fire_after( Timer_id[ index ], 500, null_delay, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_fire_after: inactive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_FIRE_AFTER
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_fire_after( Timer_id[ index ], 500, null_delay, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_fire_after: active",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_FIRE_AFTER
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_cancel( Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_cancel: active",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_CANCEL
+ );
+
+ for ( Timer_initialize(), i=0 ; i<OPERATION_COUNT ; i++ )
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_cancel( Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_cancel: inactive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_CANCEL
+ );
+
+ for ( Timer_initialize(), i=0 ; i<OPERATION_COUNT ; i++ )
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_reset( Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_reset: inactive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_RESET
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_reset( Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_reset: active",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_RESET
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_reset( Timer_id[ index ] );
+
+ build_time( &time_of_day, 12, 31, 1988, 9, 0, 0, 0 );
+
+ status = rtems_clock_set( &time_of_day );
+ directive_failed( status, "rtems_clock_set" );
+
+ time_of_day.year = 1989;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_fire_when(
+ Timer_id[ index ], &time_of_day, null_delay, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_fire_when: inactive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_FIRE_WHEN
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_fire_when(
+ Timer_id[ index ], &time_of_day, null_delay, NULL );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_fire_when: active",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_FIRE_WHEN
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_delete( Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_delete: active",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_DELETE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_timer_create( index, &Timer_id[ index ] );
+ directive_failed( status, "rtems_timer_create" );
+
+ status = rtems_timer_fire_after( Timer_id[ index ], 500, null_delay, NULL );
+ directive_failed( status, "rtems_timer_fire_after" );
+
+ status = rtems_timer_cancel( Timer_id[ index ] );
+ directive_failed( status, "rtems_timer_cancel" );
+ }
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_timer_delete( Timer_id[ index ] );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_delete: inactive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TIMER_DELETE
+ );
+
+ Timer_initialize();
+ (void) rtems_task_wake_when( &time_of_day );
+}
+
+rtems_task Middle_tasks(
+ rtems_task_argument argument
+)
+{
+ (void) rtems_task_wake_when( &time_of_day );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_wake_when",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ CALLING_OVERHEAD_TASK_WAKE_WHEN
+ );
+
+ puts( "*** END OF TEST 23 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm23/tm23.doc b/testsuites/tmtests/tm23/tm23.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm23/tm23.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm24/system.h b/testsuites/tmtests/tm24/system.h
new file mode 100644
index 0000000000..87dab5b295
--- /dev/null
+++ b/testsuites/tmtests/tm24/system.h
@@ -0,0 +1,42 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm24/task1.c b/testsuites/tmtests/tm24/task1.c
new file mode 100644
index 0000000000..379e5eb54b
--- /dev/null
+++ b/testsuites/tmtests/tm24/task1.c
@@ -0,0 +1,124 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned32 Task_count;
+
+rtems_task Tasks(
+ rtems_task_argument argument
+);
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_unsigned32 index;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 24 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ 10,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create HIGH" );
+
+ status = rtems_task_start( id, High_task, 0 );
+ directive_failed( status, "rtems_task_create HIGH" );
+
+ for ( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'R', 'E', 'S', 'T' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( id, Tasks, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_unsigned32 index;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_wake_after: yield -- returns to caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_WAKE_AFTER
+ );
+
+ Task_count = 0;
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Tasks(
+ rtems_task_argument argument
+)
+{
+ Task_count++;
+
+ if ( Task_count == 1 )
+ Timer_initialize();
+ else if ( Task_count == OPERATION_COUNT ) {
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_wake_after: yields -- preempts caller",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_TASK_WAKE_AFTER
+ );
+
+ puts( "*** END OF TEST 24 ***" );
+ exit( 0 );
+ }
+ (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
+}
diff --git a/testsuites/tmtests/tm24/tm24.doc b/testsuites/tmtests/tm24/tm24.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm24/tm24.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm25/system.h b/testsuites/tmtests/tm25/system.h
new file mode 100644
index 0000000000..b984fea8b9
--- /dev/null
+++ b/testsuites/tmtests/tm25/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm25/task1.c b/testsuites/tmtests/tm25/task1.c
new file mode 100644
index 0000000000..888946b04f
--- /dev/null
+++ b/testsuites/tmtests/tm25/task1.c
@@ -0,0 +1,109 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Semaphore_id;
+
+rtems_task High_tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id task_id;
+ rtems_unsigned32 index;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 25 ***" );
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'S', 'M', '1', ' ') ,
+ 0,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &Semaphore_id
+ );
+ directive_failed( status, "rtems_semaphore_create of SM1" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'L', 'O', 'W', ' ' ),
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOW" );
+
+ status = rtems_task_start( task_id, Low_task, 0 );
+ directive_failed( status, "rtems_task_start LOW" );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( task_id, High_tasks, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task High_tasks(
+ rtems_task_argument argument
+)
+{
+ (void) rtems_semaphore_obtain(
+ Semaphore_id,
+ RTEMS_DEFAULT_OPTIONS,
+ 0xffffffff
+ );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ Timer_initialize();
+ (void) rtems_clock_tick();
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_clock_tick",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_CLOCK_TICK
+ );
+
+ puts( "*** END OF TEST 25 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm25/tm25.doc b/testsuites/tmtests/tm25/tm25.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm25/tm25.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm26/fptest.h b/testsuites/tmtests/tm26/fptest.h
new file mode 100644
index 0000000000..daeab550ce
--- /dev/null
+++ b/testsuites/tmtests/tm26/fptest.h
@@ -0,0 +1,165 @@
+/* fptest.h
+ *
+ * This include file contains the CPU dependent implementation
+ * of the following routines needed to test RTEMS floating
+ * point support:
+ * FP_load( &context )
+ * FP_check( &context )
+ *
+ * FP_load - loads the specified floating point context
+ * FP_check - checks the specified floating point context
+ *
+ * NOTE: These routines are VERY CPU dependent and are thus
+ * located in in the CPU dependent include file
+ * fptest.h. These routines form the core of the
+ * floating point context switch test.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#ifndef __FPTEST_h
+#define __FPTEST_h
+
+#include <stdio.h>
+
+#ifndef CPU_HARDWARE_FP
+#error "This CPU does not have CPU_HARDWARE_FP defined"
+#endif
+
+#if ( CPU_HARDWARE_FP == FALSE )
+
+#define FP_DECLARE
+#define FP_LOAD( _factor )
+#define FP_CHECK( _factor ) 0
+
+#else
+
+#define FP_DECLARE \
+ double fp01 = 1.0; \
+ double fp02 = 2.0; \
+ double fp03 = 3.0; \
+ double fp04 = 4.0; \
+ double fp05 = 5.0; \
+ double fp06 = 6.0; \
+ double fp07 = 7.0; \
+ double fp08 = 8.0; \
+ double fp09 = 9.0; \
+ double fp10 = 10.0; \
+ double fp11 = 11.0; \
+ double fp12 = 12.0; \
+ double fp13 = 13.0; \
+ double fp14 = 14.0; \
+ double fp15 = 15.0; \
+ double fp16 = 16.0; \
+ double fp17 = 17.0; \
+ double fp18 = 18.0; \
+ double fp19 = 19.0; \
+ double fp20 = 20.0; \
+ double fp21 = 21.0; \
+ double fp22 = 22.0; \
+ double fp23 = 23.0; \
+ double fp24 = 24.0; \
+ double fp25 = 25.0; \
+ double fp26 = 26.0; \
+ double fp27 = 27.0; \
+ double fp28 = 28.0; \
+ double fp29 = 29.0; \
+ double fp30 = 30.0; \
+ double fp31 = 31.0; \
+ double fp32 = 32.0
+
+#define FP_LOAD( _factor ) \
+ do { \
+ fp01 += _factor; \
+ fp02 += _factor; \
+ fp03 += _factor; \
+ fp04 += _factor; \
+ fp05 += _factor; \
+ fp06 += _factor; \
+ fp07 += _factor; \
+ fp08 += _factor; \
+ fp09 += _factor; \
+ fp10 += _factor; \
+ fp11 += _factor; \
+ fp12 += _factor; \
+ fp13 += _factor; \
+ fp14 += _factor; \
+ fp15 += _factor; \
+ fp16 += _factor; \
+ fp17 += _factor; \
+ fp18 += _factor; \
+ fp19 += _factor; \
+ fp20 += _factor; \
+ fp21 += _factor; \
+ fp22 += _factor; \
+ fp23 += _factor; \
+ fp24 += _factor; \
+ fp25 += _factor; \
+ fp26 += _factor; \
+ fp27 += _factor; \
+ fp28 += _factor; \
+ fp29 += _factor; \
+ fp30 += _factor; \
+ fp31 += _factor; \
+ fp32 += _factor; \
+ } while (0)
+
+#define EPSILON (0.0005)
+#define FPABS(d) (((d) < 0.0) ? -(d) : (d))
+#define FPNEQ(a,b) (FPABS((a)-(b)) > EPSILON)
+
+#define FP_CHECK_ONE( _v, _base, _factor ) \
+ if ( FPNEQ( (_v), ((_base) + (_factor)) ) ) { \
+ printf("%d: " #_v " wrong -- (%g not %g)\n", \
+ task_index, (_v), (_base + _factor)); \
+ }
+
+
+#define FP_CHECK( _factor ) \
+ do { \
+ FP_CHECK_ONE( fp01, 1.0, (_factor) ); \
+ FP_CHECK_ONE( fp02, 2.0, (_factor) ); \
+ FP_CHECK_ONE( fp03, 3.0, (_factor) ); \
+ FP_CHECK_ONE( fp04, 4.0, (_factor) ); \
+ FP_CHECK_ONE( fp05, 5.0, (_factor) ); \
+ FP_CHECK_ONE( fp06, 6.0, (_factor) ); \
+ FP_CHECK_ONE( fp07, 7.0, (_factor) ); \
+ FP_CHECK_ONE( fp08, 8.0, (_factor) ); \
+ FP_CHECK_ONE( fp09, 9.0, (_factor) ); \
+ FP_CHECK_ONE( fp10, 10.0, (_factor) ); \
+ FP_CHECK_ONE( fp11, 11.0, (_factor) ); \
+ FP_CHECK_ONE( fp12, 12.0, (_factor) ); \
+ FP_CHECK_ONE( fp13, 13.0, (_factor) ); \
+ FP_CHECK_ONE( fp14, 14.0, (_factor) ); \
+ FP_CHECK_ONE( fp15, 15.0, (_factor) ); \
+ FP_CHECK_ONE( fp16, 16.0, (_factor) ); \
+ FP_CHECK_ONE( fp17, 17.0, (_factor) ); \
+ FP_CHECK_ONE( fp18, 18.0, (_factor) ); \
+ FP_CHECK_ONE( fp19, 19.0, (_factor) ); \
+ FP_CHECK_ONE( fp20, 20.0, (_factor) ); \
+ FP_CHECK_ONE( fp21, 21.0, (_factor) ); \
+ FP_CHECK_ONE( fp22, 22.0, (_factor) ); \
+ FP_CHECK_ONE( fp23, 23.0, (_factor) ); \
+ FP_CHECK_ONE( fp24, 24.0, (_factor) ); \
+ FP_CHECK_ONE( fp25, 25.0, (_factor) ); \
+ FP_CHECK_ONE( fp26, 26.0, (_factor) ); \
+ FP_CHECK_ONE( fp27, 27.0, (_factor) ); \
+ FP_CHECK_ONE( fp28, 28.0, (_factor) ); \
+ FP_CHECK_ONE( fp29, 29.0, (_factor) ); \
+ FP_CHECK_ONE( fp30, 30.0, (_factor) ); \
+ FP_CHECK_ONE( fp31, 31.0, (_factor) ); \
+ FP_CHECK_ONE( fp32, 32.0, (_factor) ); \
+ } while (0)
+
+#endif
+
+#endif
diff --git a/testsuites/tmtests/tm26/system.h b/testsuites/tmtests/tm26/system.h
new file mode 100644
index 0000000000..b984fea8b9
--- /dev/null
+++ b/testsuites/tmtests/tm26/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm26/task1.c b/testsuites/tmtests/tm26/task1.c
new file mode 100644
index 0000000000..804418f9cd
--- /dev/null
+++ b/testsuites/tmtests/tm26/task1.c
@@ -0,0 +1,550 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
+#include <rtems.h>
+#include "system.h"
+#include "fptest.h"
+#include <coverhd.h>
+#include <tmacros.h>
+#include <timesys.h>
+
+
+/* TEST DATA */
+rtems_id Semaphore_id;
+
+Objects_Locations location; /* uses internal RTEMS type */
+
+Thread_Control *Middle_tcb; /* uses internal RTEMS type */
+
+Thread_Control *Low_tcb; /* uses internal RTEMS type */
+
+rtems_task High_task(
+ rtems_task_argument argument
+);
+
+rtems_task Middle_task(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+rtems_task Floating_point_task_1(
+ rtems_task_argument argument
+);
+
+rtems_task Floating_point_task_2(
+ rtems_task_argument argument
+);
+
+void complete_test( void );
+
+rtems_task null_task(
+ rtems_task_argument argument
+)
+{
+}
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+ rtems_id task_id;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 26 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'F', 'P', '1', ' ' ),
+ 201,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_FLOATING_POINT,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of FP1" );
+
+ status = rtems_task_start( task_id, Floating_point_task_1, 0 );
+ directive_failed( status, "rtems_task_start of FP1" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'F', 'P', '2', ' ' ),
+ 202,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_FLOATING_POINT,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of FP2" );
+
+ status = rtems_task_start( task_id, Floating_point_task_2, 0 );
+ directive_failed( status, "rtems_task_start of FP2" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'L', 'O', 'W', ' ' ),
+ 200,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of LOW" );
+
+ status = rtems_task_start( task_id, Low_task, 0 );
+ directive_failed( status, "rtems_task_start of LOW" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'M', 'I', 'D', ' ' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of MIDDLE" );
+
+ status = rtems_task_start( task_id, Middle_task, 0 );
+ directive_failed( status, "rtems_task_start of MIDDLE" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'H', 'I', 'G', 'H' ),
+ 5,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create of HIGH" );
+
+ status = rtems_task_start( task_id, High_task, 0 );
+ directive_failed( status, "rtems_task_start of HIGH" );
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'S', 'E', 'M', '1' ),
+ OPERATION_COUNT,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &Semaphore_id
+ );
+ directive_failed( status, "rtems_semaphore_create" );
+
+ for ( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'N', 'U', 'L', 'L' ),
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &task_id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( task_id, null_task, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task High_task(
+ rtems_task_argument argument
+)
+{
+ rtems_interrupt_level level;
+
+ Timer_initialize();
+ rtems_interrupt_disable( level );
+ end_time = Read_timer();
+
+ put_time(
+ "_ISR_Disable",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ rtems_interrupt_flash( level );
+ end_time = Read_timer();
+
+ put_time(
+ "_ISR_Flash",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ rtems_interrupt_enable( level );
+ end_time = Read_timer();
+
+ put_time(
+ "_ISR_Enable",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ _Thread_Disable_dispatch();
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Disable_dispatch",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ _Thread_Enable_dispatch();
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Enable_dispatch",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ _Thread_Set_state( _Thread_Executing, STATES_SUSPENDED );
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Set_state",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ _Context_Switch_necessary = TRUE;
+
+ Timer_initialize();
+ _Thread_Dispatch(); /* dispatches Middle_task */
+}
+
+rtems_task Middle_task(
+ rtems_task_argument argument
+)
+{
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Disptach (NO FP)",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ _Thread_Set_state( _Thread_Executing, STATES_SUSPENDED );
+
+ Middle_tcb = _Thread_Executing;
+
+ _Thread_Executing =
+ (Thread_Control *) _Thread_Ready_chain[200].first;
+
+ /* do not force context switch */
+
+ _Context_Switch_necessary = FALSE;
+
+ _Thread_Disable_dispatch();
+
+ Timer_initialize();
+ _Context_Switch( &Middle_tcb->Registers, &_Thread_Executing->Registers );
+
+ Timer_initialize();
+ _Context_Switch(&Middle_tcb->Registers, &Low_tcb->Registers);
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ Thread_Control *executing;
+
+ end_time = Read_timer();
+
+ put_time(
+ "context switch: no floating point contexts",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ executing = _Thread_Executing;
+
+ Low_tcb = executing;
+
+ Timer_initialize();
+ _Context_Switch( &executing->Registers, &executing->Registers );
+
+ end_time = Read_timer();
+
+ put_time(
+ "context switch: self",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ _Context_Switch(&executing->Registers, &Middle_tcb->Registers);
+
+ end_time = Read_timer();
+
+ put_time(
+ "context switch: to another task",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ _Thread_Executing =
+ (Thread_Control *) _Thread_Ready_chain[201].first;
+
+ /* do not force context switch */
+
+ _Context_Switch_necessary = FALSE;
+
+ _Thread_Disable_dispatch();
+
+ Timer_initialize();
+ _Context_Restore_fp( &_Thread_Executing->fp_context );
+ _Context_Switch( &executing->Registers, &_Thread_Executing->Registers );
+}
+
+rtems_task Floating_point_task_1(
+ rtems_task_argument argument
+)
+{
+ Thread_Control *executing;
+ FP_DECLARE;
+
+ end_time = Read_timer();
+
+ put_time(
+ "fp context switch: restore 1st FP task",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ executing = _Thread_Executing;
+
+ _Thread_Executing =
+ (Thread_Control *) _Thread_Ready_chain[202].first;
+
+ /* do not force context switch */
+
+ _Context_Switch_necessary = FALSE;
+
+ _Thread_Disable_dispatch();
+
+ Timer_initialize();
+ _Context_Save_fp( &executing->fp_context );
+ _Context_Restore_fp( &_Thread_Executing->fp_context );
+ _Context_Switch( &executing->Registers, &_Thread_Executing->Registers );
+ /* switch to Floating_point_task_2 */
+
+ end_time = Read_timer();
+
+ put_time(
+ "fp context switch: save idle, restore initialized",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ FP_LOAD( 1.0 );
+
+ executing = _Thread_Executing;
+
+ _Thread_Executing =
+ (Thread_Control *) _Thread_Ready_chain[202].first;
+
+ /* do not force context switch */
+
+ _Context_Switch_necessary = FALSE;
+
+ _Thread_Disable_dispatch();
+
+ Timer_initialize();
+ _Context_Save_fp( &executing->fp_context );
+ _Context_Restore_fp( &_Thread_Executing->fp_context );
+ _Context_Switch( &executing->Registers, &_Thread_Executing->Registers );
+ /* switch to Floating_point_task_2 */
+}
+
+rtems_task Floating_point_task_2(
+ rtems_task_argument argument
+)
+{
+ Thread_Control *executing;
+ FP_DECLARE;
+
+ end_time = Read_timer();
+
+ put_time(
+ "fp context switch: save idle, restore idle",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ executing = _Thread_Executing;
+
+ _Thread_Executing =
+ (Thread_Control *) _Thread_Ready_chain[201].first;
+
+ FP_LOAD( 1.0 );
+
+ /* do not force context switch */
+
+ _Context_Switch_necessary = FALSE;
+
+ _Thread_Disable_dispatch();
+
+ Timer_initialize();
+ _Context_Save_fp( &executing->fp_context );
+ _Context_Restore_fp( &_Thread_Executing->fp_context );
+ _Context_Switch( &executing->Registers, &_Thread_Executing->Registers );
+ /* switch to Floating_point_task_1 */
+
+ end_time = Read_timer();
+
+ put_time(
+ "fp context switch: save initialized, restore initialized",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ complete_test();
+}
+
+void complete_test( void )
+{
+ rtems_unsigned32 index;
+ rtems_id task_id;
+
+ Timer_initialize();
+ _Thread_Resume( Middle_tcb );
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Resume",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ _Thread_Set_state( Middle_tcb, STATES_WAITING_FOR_MESSAGE );
+
+ Timer_initialize();
+ _Thread_Unblock( Middle_tcb );
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Unblock",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ _Thread_Set_state( Middle_tcb, STATES_WAITING_FOR_MESSAGE );
+
+ Timer_initialize();
+ _Thread_Ready( Middle_tcb );
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Ready",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ task_id = Middle_tcb->Object.id;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) _Thread_Get( task_id, &location );
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Get",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) _Semaphore_Get( Semaphore_id, &location );
+ end_time = Read_timer();
+
+ put_time(
+ "_Semaphore_Get",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) _Thread_Get( 0x3, &location );
+ end_time = Read_timer();
+
+ put_time(
+ "_Thread_Get: invalid id",
+ end_time,
+ OPERATION_COUNT,
+ 0,
+ 0
+ );
+
+ puts( "*** END OF TEST 26 ***" );
+ exit( 0 );
+}
+
diff --git a/testsuites/tmtests/tm26/tm26.doc b/testsuites/tmtests/tm26/tm26.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm26/tm26.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm27/system.h b/testsuites/tmtests/tm27/system.h
new file mode 100644
index 0000000000..87dab5b295
--- /dev/null
+++ b/testsuites/tmtests/tm27/system.h
@@ -0,0 +1,42 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm27/task1.c b/testsuites/tmtests/tm27/task1.c
new file mode 100644
index 0000000000..cb1c21da4a
--- /dev/null
+++ b/testsuites/tmtests/tm27/task1.c
@@ -0,0 +1,272 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+/*
+ * WARNING!!!!!!!!!
+ *
+ * THIS TEST USES INTERNAL RTEMS VARIABLES!!!
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+#include <bsp.h>
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+rtems_task Task_2(
+ rtems_task_argument argument
+);
+
+volatile rtems_unsigned32 Interrupt_occurred;
+volatile rtems_unsigned32 Interrupt_enter_time, Interrupt_enter_nested_time;
+volatile rtems_unsigned32 Interrupt_return_time, Interrupt_return_nested_time;
+rtems_unsigned32 Interrupt_nest;
+
+rtems_isr Isr_handler(
+ rtems_vector_number vector
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 27 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'A', '1', ' ' ),
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 1 ]
+ );
+ directive_failed( status, "rtems_task_create Task_1" );
+
+ status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
+ directive_failed( status, "rtems_task_start Task_1" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'A', '2', ' ' ),
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 2 ]
+ );
+ directive_failed( status, "rtems_task_create of Task_2" );
+
+ status = rtems_task_start( Task_id[ 2 ], Task_2, 0 );
+ directive_failed( status, "rtems_task_start of Task_2" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ Install_tm27_vector( Isr_handler );
+
+ /*
+ * No preempt .. no nesting
+ */
+
+ Interrupt_nest = 0;
+
+ _Thread_Dispatch_disable_level = 0;
+
+ Interrupt_occurred = 0;
+ Timer_initialize();
+ Cause_tm27_intr();
+ /* goes to Isr_handler */
+
+#if (MUST_WAIT_FOR_INTERRUPT == 1)
+ while ( Interrupt_occurred == 0 );
+#endif
+ Interrupt_return_time = Read_timer();
+
+ put_time(
+ "interrupt entry overhead: returns to interrupted task",
+ Interrupt_enter_time,
+ 1,
+ 0,
+ 0
+ );
+
+ put_time(
+ "interrupt exit overhead: returns to interrupted task",
+ Interrupt_return_time,
+ 1,
+ 0,
+ 0
+ );
+
+ /*
+ * No preempt .. nested
+ */
+
+ _Thread_Dispatch_disable_level = 1;
+
+ Interrupt_nest = 1;
+
+ Interrupt_occurred = 0;
+ Timer_initialize();
+ Cause_tm27_intr();
+ /* goes to Isr_handler */
+
+#if (MUST_WAIT_FOR_INTERRUPT == 1)
+ while ( Interrupt_occurred == 0 );
+#endif
+ Interrupt_return_time = Read_timer();
+
+ put_time(
+ "interrupt entry overhead: returns to nested interrupt",
+ Interrupt_enter_nested_time,
+ 1,
+ 0,
+ 0
+ );
+
+ put_time(
+ "interrupt exit overhead: returns to nested interrupt",
+ Interrupt_return_nested_time,
+ 1,
+ 0,
+ 0
+ );
+
+ /*
+ * Does a preempt .. not nested
+ */
+
+ _Thread_Dispatch_disable_level = 0;
+
+ _Thread_Heir = (rtems_tcb *) _Thread_Ready_chain[254].last;
+
+ _Context_Switch_necessary = 1;
+
+ Interrupt_occurred = 0;
+ Timer_initialize();
+ Cause_tm27_intr();
+
+ /*
+ * goes to Isr_handler and then returns
+ */
+
+ puts( "*** END OF TEST 27 ***" );
+ exit( 0 );
+}
+
+/*
+ * NOTE: When this task is executing, some of the assumptions made
+ * regarding the placement of the currently executing task's TCB
+ * on the ready chains have been violated. At least the assumption
+ * that this task is at the head of the chain for its priority
+ * has been violated.
+ */
+
+rtems_task Task_2(
+ rtems_task_argument argument
+)
+{
+#if (MUST_WAIT_FOR_INTERRUPT == 1)
+ while ( Interrupt_occurred == 0 );
+#endif
+ end_time = Read_timer();
+
+ put_time(
+ "interrupt entry overhead: returns to preempting task",
+ Interrupt_enter_time,
+ 1,
+ 0,
+ 0
+ );
+
+ put_time(
+ "interrupt exit overhead: returns to preempting task",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ fflush( stdout );
+
+ /*
+ * Switch back to the other task to exit the test.
+ */
+
+ _Thread_Dispatch_disable_level = 0;
+
+ _Thread_Heir = (rtems_tcb *) _Thread_Ready_chain[254].first;
+
+ _Context_Switch_necessary = 1;
+
+ _Thread_Dispatch();
+
+}
+
+/* The Isr_handler() and Isr_handler_inner() routines are structured
+ * so that there will be as little entry overhead as possible included
+ * in the interrupt entry time.
+ */
+
+void Isr_handler_inner( void );
+
+rtems_isr Isr_handler(
+ rtems_vector_number vector
+)
+{
+ end_time = Read_timer();
+
+ Interrupt_occurred = 1;
+ Isr_handler_inner();
+}
+
+void Isr_handler_inner( void )
+{
+
+ /*enable_tracing();*/
+ Clear_tm27_intr();
+ switch ( Interrupt_nest ) {
+ case 0:
+ Interrupt_enter_time = end_time;
+ break;
+ case 1:
+ Interrupt_enter_time = end_time;
+ Interrupt_nest = 2;
+ Interrupt_occurred = 0;
+ Lower_tm27_intr();
+ Timer_initialize();
+ Cause_tm27_intr();
+ /* goes to a nested copy of Isr_handler */
+#if (MUST_WAIT_FOR_INTERRUPT == 1)
+ while ( Interrupt_occurred == 0 );
+#endif
+ Interrupt_return_nested_time = Read_timer();
+ break;
+ case 2:
+ Interrupt_enter_nested_time = end_time;
+ break;
+ }
+
+ Timer_initialize();
+}
diff --git a/testsuites/tmtests/tm27/tm27.doc b/testsuites/tmtests/tm27/tm27.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm27/tm27.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm28/system.h b/testsuites/tmtests/tm28/system.h
new file mode 100644
index 0000000000..ae0265c1eb
--- /dev/null
+++ b/testsuites/tmtests/tm28/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_PORTS 1
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm28/task1.c b/testsuites/tmtests/tm28/task1.c
new file mode 100644
index 0000000000..96c8707c76
--- /dev/null
+++ b/testsuites/tmtests/tm28/task1.c
@@ -0,0 +1,134 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_id Port_id;
+
+rtems_unsigned8 Internal_area[ 256 ] CPU_STRUCTURE_ALIGNMENT;
+rtems_unsigned8 External_area[ 256 ] CPU_STRUCTURE_ALIGNMENT;
+
+rtems_task Test_task(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 28 ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'I', 'M', 'E' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &Task_id[ 1 ]
+ );
+ directive_failed( status, "rtems_task_create" );
+
+ status = rtems_task_start( Task_id[ 1 ], Test_task, 0 );
+ directive_failed( status, "rtems_task_start" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Test_task (
+ rtems_task_argument argument
+)
+{
+ rtems_name name;
+ rtems_unsigned32 index;
+ void *converted;
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ name = rtems_build_name( 'P', 'O', 'R', 'T' ),
+
+ Timer_initialize();
+ rtems_port_create(
+ name,
+ Internal_area,
+ External_area,
+ 0xff,
+ &Port_id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_create",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PORT_CREATE
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_port_external_to_internal(
+ Port_id,
+ &External_area[ 0xf ],
+ &converted
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_external_to_internal",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_PORT_EXTERNAL_TO_INTERNAL
+ );
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_port_internal_to_external(
+ Port_id,
+ &Internal_area[ 0xf ],
+ &converted
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_internal_to_external",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_PORT_INTERNAL_TO_EXTERNAL
+ );
+
+ Timer_initialize();
+ rtems_port_delete( Port_id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_delete",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_PORT_DELETE
+ );
+
+ puts( "*** END OF TEST 28 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm28/tm28.doc b/testsuites/tmtests/tm28/tm28.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm28/tm28.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tm29/system.h b/testsuites/tmtests/tm29/system.h
new file mode 100644
index 0000000000..276d7b92f6
--- /dev/null
+++ b/testsuites/tmtests/tm29/system.h
@@ -0,0 +1,43 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 111
+#define CONFIGURE_MAXIMUM_PERIODS 111
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tm29/task1.c b/testsuites/tmtests/tm29/task1.c
new file mode 100644
index 0000000000..6c54b4a120
--- /dev/null
+++ b/testsuites/tmtests/tm29/task1.c
@@ -0,0 +1,207 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_name Period_name;
+
+rtems_task Tasks(
+ rtems_task_argument argument
+);
+
+rtems_task Low_task(
+ rtems_task_argument argument
+);
+
+rtems_unsigned32 Task_count;
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_unsigned32 index;
+ rtems_status_code status;
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST 29 ***" );
+
+ Period_name = rtems_build_name( 'P', 'R', 'D', ' ' );
+
+ Timer_initialize();
+ (void) rtems_rate_monotonic_create( Period_name, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_create",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_RATE_MONOTONIC_CREATE
+ );
+
+ Timer_initialize();
+ (void) rtems_rate_monotonic_period( id, 10 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_period: initiate period -- returns to caller",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD
+ );
+
+ Timer_initialize();
+ (void) rtems_rate_monotonic_period( id, RTEMS_PERIOD_STATUS );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_period: obtain status",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD
+ );
+
+ Timer_initialize();
+ (void) rtems_rate_monotonic_cancel( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_cancel",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_RATE_MONOTONIC_CANCEL
+ );
+
+ Timer_initialize();
+ (void) rtems_rate_monotonic_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_delete: inactive",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_RATE_MONOTONIC_DELETE
+ );
+
+ status = rtems_rate_monotonic_create( Period_name, &id );
+ directive_failed( status, "rtems_rate_monotonic_create" );
+
+ status = rtems_rate_monotonic_period( id, 10 );
+ directive_failed( status, "rtems_rate_monotonic_period" );
+
+ Timer_initialize();
+ rtems_rate_monotonic_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_delete: active",
+ end_time,
+ 1,
+ 0,
+ CALLING_OVERHEAD_RATE_MONOTONIC_DELETE
+ );
+
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'E', 'S', 'T' ),
+ 128,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create LOOP" );
+
+ status = rtems_task_start( id, Tasks, 0 );
+ directive_failed( status, "rtems_task_start LOOP" );
+ }
+
+ status = rtems_task_create(
+ rtems_build_name( 'L', 'O', 'W', ' ' ),
+ 200,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create LOW" );
+
+ status = rtems_task_start( id, Low_task, 0 );
+ directive_failed( status, "rtems_task_start LOW" );
+
+ Task_count = 0;
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Tasks(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ status = rtems_rate_monotonic_create( 1, &id );
+ directive_failed( status, "rtems_rate_monotonic_create" );
+
+ status = rtems_rate_monotonic_period( id, 100 );
+ directive_failed( status, "rtems_rate_monotonic_period" );
+
+ /*
+ * Give up the processor to allow all tasks to actually
+ * create and start their period timer before the benchmark
+ * timer is initialized.
+ */
+
+ (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
+
+ Task_count++;
+
+ if ( Task_count == 1 )
+ Timer_initialize();
+
+ (void) rtems_rate_monotonic_period( id, 100 );
+}
+
+rtems_task Low_task(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+
+ end_time = Read_timer();
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) Empty_function();
+ overhead = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_period: conclude periods -- caller blocks",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD
+ );
+
+ puts( "*** END OF TEST 29 ***" );
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tm29/tm29.doc b/testsuites/tmtests/tm29/tm29.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tm29/tm29.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
diff --git a/testsuites/tmtests/tmck/system.h b/testsuites/tmtests/tmck/system.h
new file mode 100644
index 0000000000..e5c25a505f
--- /dev/null
+++ b/testsuites/tmtests/tmck/system.h
@@ -0,0 +1,42 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tmck/task1.c b/testsuites/tmtests/tmck/task1.c
new file mode 100644
index 0000000000..2a6f3db9bb
--- /dev/null
+++ b/testsuites/tmtests/tmck/task1.c
@@ -0,0 +1,180 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#define TEST_INIT
+#include "system.h"
+
+#define MAXIMUM_DISTRIBUTION 10000
+
+#undef OPERATION_COUNT
+#define OPERATION_COUNT 100000
+
+int Distribution[ MAXIMUM_DISTRIBUTION + 1 ];
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+void check_read_timer( void );
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ /*
+ * Tell the Timer Driver what we are doing
+ */
+
+ Set_find_average_overhead( 1 );
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME CHECKER ***" );
+
+ Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ),
+
+ status = rtems_task_create(
+ 1,
+ 5,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create of TA1" );
+
+ status = rtems_task_start( id, Task_1, 0 );
+ directive_failed( status, "rtems_task_start of TA1" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ rtems_unsigned32 index;
+
+ check_read_timer();
+rtems_test_pause();
+
+ Timer_initialize();
+ end_time = Read_timer();
+
+ put_time(
+ "NULL timer stopped at",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index = 1 ; index <= 1000 ; index++ )
+ (void) Empty_function();
+ end_time = Read_timer();
+
+ put_time(
+ "LOOP (1000) timer stopped at",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index = 1 ; index <= 10000 ; index++ )
+ (void) Empty_function();
+ end_time = Read_timer();
+
+ put_time(
+ "LOOP (10000) timer stopped at",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index = 1 ; index <= 50000 ; index++ )
+ (void) Empty_function();
+ end_time = Read_timer();
+
+ put_time(
+ "LOOP (50000) timer stopped at",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ Timer_initialize();
+ for ( index = 1 ; index <= 100000 ; index++ )
+ (void) Empty_function();
+ end_time = Read_timer();
+
+ put_time(
+ "LOOP (100000) timer stopped at",
+ end_time,
+ 1,
+ 0,
+ 0
+ );
+
+ puts( "*** END OF TIME CHECKER ***" );
+ exit( 0 );
+}
+
+void check_read_timer()
+{
+ rtems_unsigned32 index;
+ rtems_unsigned32 time;
+
+ for ( index = 1 ; index <= MAXIMUM_DISTRIBUTION ; index++ )
+ Distribution[ index ] = 0;
+
+ for ( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
+ Timer_initialize();
+ end_time = Read_timer();
+ if ( end_time > MAXIMUM_DISTRIBUTION ) {
+ /*
+ * Under UNIX a simple process swap takes longer than we
+ * consider valid for our testing purposes.
+ */
+ printf( "TOO LONG (%d) at index %d!!!\n", end_time, index );
+#if defined(unix) || defined(go32)
+ index--;
+ continue;
+#else
+ exit( 1 );
+#endif
+ }
+ else
+ Distribution[ end_time ]++;
+ }
+
+ printf( "Units may not be in microseconds for this test!!!\n" );
+ time = 0;
+ for ( index = 0 ; index <= MAXIMUM_DISTRIBUTION ; index++ ) {
+ time += (Distribution[ index ] * index);
+ if ( Distribution[ index ] != 0 )
+ printf( "%d %d\n", index, Distribution[ index ] );
+ }
+ printf( "Total time = %d\n", time );
+ printf( "Average time = %d\n", time / OPERATION_COUNT );
+}
diff --git a/testsuites/tmtests/tmck/tmck.doc b/testsuites/tmtests/tmck/tmck.doc
new file mode 100644
index 0000000000..a4fa6eb188
--- /dev/null
+++ b/testsuites/tmtests/tmck/tmck.doc
@@ -0,0 +1,20 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+
+This file describes the directives timed by this test.
+
+benchmark name: timecheck
+
+This becnchmark is used to calibrate the timer. It is only used to
+when initial timing begins on a particular processor board.
+
diff --git a/testsuites/tmtests/tmoverhd/dumrtems.h b/testsuites/tmtests/tmoverhd/dumrtems.h
new file mode 100644
index 0000000000..db1146e3ae
--- /dev/null
+++ b/testsuites/tmtests/tmoverhd/dumrtems.h
@@ -0,0 +1,255 @@
+/* dumrtems.h
+ *
+ * This include file contains phony macros to map
+ * executive calls to Empty_directive().
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#ifndef __DUMRTEMS_h
+#define __DUMRTEMS_h
+
+/* RTEMS call redefinition macros */
+
+#undef rtems_signal_catch
+#undef rtems_signal_send
+#undef rtems_io_close
+#undef rtems_io_control
+#undef rtems_io_initialize
+#undef rtems_io_open
+#undef rtems_io_read
+#undef rtems_io_write
+#undef rtems_port_internal_to_external
+#undef rtems_port_external_to_internal
+#undef rtems_port_create
+#undef rtems_port_delete
+#undef rtems_port_ident
+#undef rtems_event_receive
+#undef rtems_event_send
+#undef rtems_initialize_executive
+#undef rtems_shutdown_executive
+#undef rtems_interrupt_catch
+#undef rtems_partition_create
+#undef rtems_partition_delete
+#undef rtems_partition_get_buffer
+#undef rtems_partition_ident
+#undef rtems_partition_return_buffer
+#undef rtems_message_queue_broadcast
+#undef rtems_message_queue_create
+#undef rtems_message_queue_delete
+#undef rtems_message_queue_flush
+#undef rtems_message_queue_ident
+#undef rtems_message_queue_receive
+#undef rtems_message_queue_send
+#undef rtems_message_queue_urgent
+#undef rtems_region_create
+#undef rtems_region_delete
+#undef rtems_region_get_segment
+#undef rtems_region_ident
+#undef rtems_region_return_segment
+#undef rtems_semaphore_create
+#undef rtems_semaphore_delete
+#undef rtems_semaphore_ident
+#undef rtems_semaphore_obtain
+#undef rtems_semaphore_release
+#undef rtems_task_create
+#undef rtems_task_delete
+#undef rtems_task_get_note
+#undef rtems_task_ident
+#undef rtems_task_mode
+#undef rtems_task_restart
+#undef rtems_task_resume
+#undef rtems_task_set_note
+#undef rtems_task_set_priority
+#undef rtems_task_start
+#undef rtems_task_suspend
+#undef rtems_clock_get
+#undef rtems_clock_set
+#undef rtems_clock_tick
+#undef rtems_task_wake_after
+#undef rtems_task_wake_when
+#undef rtems_fatal_error_occurred
+#undef rtems_rate_monotonic_create
+#undef rtems_rate_monotonic_ident
+#undef rtems_rate_monotonic_delete
+#undef rtems_rate_monotonic_cancel
+#undef rtems_rate_monotonic_period
+#undef rtems_multiprocessing_announce
+#undef rtems_timer_create
+#undef rtems_timer_ident
+#undef rtems_timer_delete
+#undef rtems_timer_cancel
+#undef rtems_timer_fire_after
+#undef rtems_timer_fire_when
+#undef rtems_timer_reset
+
+#define rtems_signal_catch( asraddr, mode ) \
+ Empty_directive( asraddr, mode )
+#define rtems_signal_send( tid, signal ) \
+ Empty_directive( tid, signal )
+
+#define rtems_io_close( major, minor, argp, rval ) \
+ Empty_directive( major, minor, argp, rval )
+#define rtems_io_control( major, minor, argp, rval ) \
+ Empty_directive( major, minor, argp, rval )
+#define rtems_io_initialize( major, minor, argp, rval ) \
+ Empty_directive( major, minor, argp, rval )
+#define rtems_io_open( major, minor, argp, rval ) \
+ Empty_directive( major, minor, argp, rval )
+#define rtems_io_read( major, minor, argp, rval ) \
+ Empty_directive( major, minor, argp, rval )
+#define rtems_io_write( major, minor, argp, rval ) \
+ Empty_directive( major, minor, argp, rval )
+
+#define rtems_port_internal_to_external( dpid, internal, external ) \
+ Empty_directive( dpid, internal, external )
+#define rtems_port_external_to_internal( dpid, external, internal ) \
+ Empty_directive( dpid, external, internal )
+#define rtems_port_create( name, intaddr, extaddr, length, dpid ) \
+ Empty_directive( name, intaddr, extaddr, length, dpid )
+#define rtems_port_delete( dpid ) \
+ Empty_directive( dpid )
+#define rtems_port_ident( name, dpid ) \
+ Empty_directive( name, dpid )
+
+#define rtems_event_receive( eventin, options, timeout, eventout ) \
+ Empty_directive( eventin, options, timeout, eventout )
+#define rtems_event_send( tid, event ) \
+ Empty_directive( tid, event )
+
+#define rtems_initialize_executive( conftbl, cputbl ) \
+ Empty_directive( conftbl, cputbl )
+#define rtems_shutdown_executive( the_error ) \
+ Empty_directive( the_error )
+
+#define rtems_interrupt_catch( israddr, vector, oldisr ) \
+ Empty_directive( israddr, vector, oldisr )
+
+#define rtems_partition_create( name, paddr, length, bsize, attr, ptid ) \
+ Empty_directive( name, paddr, length, bsize, attr, ptid )
+#define rtems_partition_delete( ptid ) \
+ Empty_directive( ptid )
+#define rtems_partition_get_buffer( ptid, bufaddr ) \
+ Empty_directive( ptid, bufaddr )
+#define rtems_partition_ident( name, node, ptid ) \
+ Empty_directive( name, node, ptid )
+#define rtems_partition_return_buffer( ptid, bufaddr ) \
+ Empty_directive( ptid, bufaddr )
+
+#define rtems_message_queue_broadcast( qid, buffer, count ) \
+ Empty_directive( qid, buffer, count )
+#define rtems_message_queue_create( name, count, attr, qid ) \
+ Empty_directive( name, count, attr, qid )
+#define rtems_message_queue_delete( qid ) \
+ Empty_directive( qid )
+#define rtems_message_queue_flush( qid, count ) \
+ Empty_directive( qid, count )
+#define rtems_message_queue_ident( name, node, qid ) \
+ Empty_directive( name, node, qid )
+#define rtems_message_queue_receive( qid, buffer, options, timeout ) \
+ Empty_directive( qid, buffer, options, timeout )
+#define rtems_message_queue_send( qid, buffer ) \
+ Empty_directive( qid, buffer )
+#define rtems_message_queue_urgent( qid, buffer ) \
+ Empty_directive( qid, buffer )
+
+#define rtems_region_create( name, paddr, length, pagesize, attr, rnid ) \
+ Empty_directive( name, paddr, length, pagesize, attr, rnid )
+#define rtems_region_delete( rnid ) \
+ Empty_directive( rnid )
+#define rtems_region_get_segment( rnid, size, options, timeout, segaddr ) \
+ Empty_directive( rnid, size, options, timeout, segaddr )
+#define rtems_region_ident( name, rnid ) \
+ Empty_directive( name, rnid )
+#define rtems_region_return_segment( rnid, segaddr ) \
+ Empty_directive( rnid, segaddr )
+
+#define rtems_semaphore_create( name, count, attr, priceil, smid ) \
+ Empty_directive( name, count, attr, priceil, smid )
+#define rtems_semaphore_delete( smid ) \
+ Empty_directive( smid )
+#define rtems_semaphore_ident( name, node, smid ) \
+ Empty_directive( name, node, smid )
+#define rtems_semaphore_obtain( smid, options, timeout ) \
+ Empty_directive( smid, options, timeout )
+#define rtems_semaphore_release( smid ) \
+ Empty_directive( smid )
+
+#define rtems_task_create( name, priority, stack_size, mode, attr, tid ) \
+ Empty_directive( name, priority, stack_size, mode, attr, tid )
+#define rtems_task_delete( tid ) \
+ Empty_directive( tid )
+#define rtems_task_get_note( tid, notepad, note ) \
+ Empty_directive( tid, notepad, note )
+#define rtems_task_ident( name, node, tid ) \
+ Empty_directive( name, node, tid )
+#define rtems_task_mode( mode, mask, pmode ) \
+ Empty_directive( mode, mask, pmode )
+#define rtems_task_restart( tid, arg ) \
+ Empty_directive( tid, arg )
+#define rtems_task_resume( tid ) \
+ Empty_directive( tid )
+#define rtems_task_set_note( tid, notepad, note ) \
+ Empty_directive( tid, notepad, note )
+#define rtems_task_set_priority( tid, priority, ppriority ) \
+ Empty_directive( tid, priority, ppriority )
+#define rtems_task_start( tid, saddr, arg ) \
+ Empty_directive( tid, saddr, arg )
+#define rtems_task_suspend( tid ) \
+ Empty_directive( tid )
+
+#define rtems_clock_get( options, time ) \
+ Empty_directive( options, time )
+#define rtems_clock_set( time ) \
+ Empty_directive( time )
+#define rtems_clock_tick() \
+ Empty_directive()
+#define rtems_task_wake_after( ticks ) \
+ Empty_directive( ticks )
+#define rtems_task_wake_when( time ) \
+ Empty_directive( time )
+
+#define rtems_fatal_error_occurred( errcode ) \
+ Empty_directive( errcode )
+
+#define rtems_rate_monotonic_create( name, id ) \
+ Empty_directive( name, id )
+#define rtems_rate_monotonic_ident( name, id ) \
+ Empty_directive( name, id )
+#define rtems_rate_monotonic_delete( id ) \
+ Empty_directive( id )
+#define rtems_rate_monotonic_cancel( id ) \
+ Empty_directive( id )
+#define rtems_rate_monotonic_period( id, period ) \
+ Empty_directive( id, period )
+
+#define rtems_multiprocessing_announce() \
+ Empty_directive()
+
+#define rtems_timer_create( name, tmid ) \
+ Empty_directive( name, tmid )
+#define rtems_timer_delete( tmid ) \
+ Empty_directive( tmid )
+#define rtems_timer_cancel( tmid ) \
+ Empty_directive( tmid )
+#define rtems_timer_ident( name, tmid ) \
+ Empty_directive( name, tmid )
+#define rtems_timer_fire_after( tmid, ticks, routine, user_data ) \
+ Empty_directive( tmid, ticks, routine, user_data )
+#define rtems_timer_fire_when( tmid, time, routine, user_data ) \
+ Empty_directive( tmid, time, routine, user_data )
+#define rtems_timer_reset( tmid ) \
+ Empty_directive( tmid )
+
+rtems_status_code Empty_directive();
+
+#endif
+/* end of include file */
diff --git a/testsuites/tmtests/tmoverhd/empty.c b/testsuites/tmtests/tmoverhd/empty.c
new file mode 100644
index 0000000000..8450272b3a
--- /dev/null
+++ b/testsuites/tmtests/tmoverhd/empty.c
@@ -0,0 +1,41 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include "system.h"
+
+rtems_timer_service_routine Timer_handler(
+ rtems_id argument
+)
+{
+}
+
+rtems_asr Isr_handler(
+ rtems_signal_set signals
+)
+{
+}
+
+rtems_asr Asr_handler(
+ rtems_signal_set signals
+)
+{
+}
+
+rtems_task task_func() {}
+
+void null_func() {}
+
+rtems_status_code Empty_directive()
+{
+ return( RTEMS_SUCCESSFUL );
+}
diff --git a/testsuites/tmtests/tmoverhd/system.h b/testsuites/tmtests/tmoverhd/system.h
new file mode 100644
index 0000000000..4e12e00e24
--- /dev/null
+++ b/testsuites/tmtests/tmoverhd/system.h
@@ -0,0 +1,60 @@
+/* system.h
+ *
+ * This include file is used by all tests in the Time Suite.
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+
+#include <coverhd.h>
+#include <tmacros.h>
+
+/* functions */
+
+rtems_task Init(
+ rtems_task_argument argument
+);
+
+rtems_timer_service_routine Timer_handler(
+ rtems_id argument
+);
+
+rtems_asr Isr_handler(
+ rtems_signal_set signals
+);
+
+rtems_asr Asr_handler(
+ rtems_signal_set signals
+);
+
+rtems_task task_func();
+
+void null_func();
+
+rtems_status_code Empty_directive();
+
+#include <timesys.h>
+
+/* configuration information */
+
+#define CONFIGURE_TMTEST
+
+#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_TICKS_PER_TIMESLICE 0
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <confdefs.h>
+
+/* end of include file */
diff --git a/testsuites/tmtests/tmoverhd/testtask.c b/testsuites/tmtests/tmoverhd/testtask.c
new file mode 100644
index 0000000000..bc1d64279c
--- /dev/null
+++ b/testsuites/tmtests/tmoverhd/testtask.c
@@ -0,0 +1,1279 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1997.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+rtems_unsigned8 Memory_area[ 2048 ];
+rtems_unsigned8 Internal_port_area[ 256 ];
+rtems_unsigned8 External_port_area[ 256 ];
+
+rtems_task Task_1(
+ rtems_task_argument argument
+);
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{ rtems_id id;
+ rtems_status_code status;
+
+ Set_find_average_overhead( TRUE );
+
+ Print_Warning();
+
+ puts( "\n\n*** TIME TEST OVERHEAD ***" );
+
+ status = rtems_task_create(
+ rtems_build_name( 'T', 'A', '1', ' ' ),
+ 254,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ directive_failed( status, "rtems_task_create of TA1" );
+
+ status = rtems_task_start( id, Task_1, 0 );
+ directive_failed( status, "rtems_task_start of TA1" );
+
+ status = rtems_task_delete( RTEMS_SELF );
+ directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
+}
+
+/* comment out the following include to verify type are correct */
+#include "dumrtems.h"
+
+rtems_task Task_1(
+ rtems_task_argument argument
+)
+{
+ rtems_name name;
+ rtems_unsigned32 index;
+ rtems_cpu_table cpu_table;
+ rtems_id id;
+ rtems_task_priority in_priority;
+ rtems_task_priority out_priority;
+ rtems_mode in_mode;
+ rtems_mode mask;
+ rtems_mode out_mode;
+ rtems_unsigned32 note;
+ rtems_time_of_day time;
+ rtems_interval timeout;
+ rtems_signal_set signals;
+ void *address_1;
+ rtems_event_set events;
+ long buffer[ 4 ];
+ rtems_unsigned32 count;
+ rtems_device_major_number major;
+ rtems_device_minor_number minor;
+ rtems_unsigned32 io_result;
+ rtems_unsigned32 error;
+ rtems_clock_get_options options;
+
+ name = rtems_build_name( 'N', 'A', 'M', 'E' );
+ in_priority = 250;
+ in_mode = RTEMS_NO_PREEMPT;
+ mask = RTEMS_PREEMPT_MASK;
+ note = 8;
+ timeout = 100;
+ signals = RTEMS_SIGNAL_1 | RTEMS_SIGNAL_3;
+ major = 10;
+ minor = 0;
+ error = 100;
+ options = 0;
+
+/* rtems_initialize_executive */
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_initialize_executive( &BSP_Configuration, &cpu_table );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_initialize_executive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_shutdown_executive */
+
+ Timer_initialize();
+ for ( index=1 ; index <= OPERATION_COUNT ; index++ )
+ (void) rtems_shutdown_executive( error );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_shutdown_executive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_create(
+ name,
+ in_priority,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_ident( name, RTEMS_SEARCH_ALL_NODES, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_start */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_start( id, Task_1, 0 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_start",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_restart */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_restart( id, 0 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_restart",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_suspend */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_suspend( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_suspend",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_resume */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_resume( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_resume",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_set_priority */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_set_priority( id, in_priority, &out_priority );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_set_priority",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_mode */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_mode( in_mode, mask, &out_mode );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_mode",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_get_note */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_get_note( id, 1, note );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_get_note",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_set_note */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_set_note( id, 1, note );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_set_note",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_wake_when */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_wake_when( time );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_wake_when",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_task_wake_after */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_task_wake_after( timeout );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_task_wake_after",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_interrupt_catch */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_interrupt_catch( Isr_handler, 5, address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_interrupt_catch",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_clock_get */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_clock_get( options, time );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_clock_get",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_clock_set */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_clock_set( time );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_clock_set",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_clock_tick */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_clock_tick();
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_clock_tick",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+rtems_test_pause();
+
+/* rtems_timer_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_create( name, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_timer_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_timer_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_ident( name, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_timer_fire_after */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_fire_after(
+ id,
+ timeout,
+ Timer_handler,
+ NULL
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_fire_after",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_timer_fire_when */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_fire_when(
+ id,
+ time,
+ Timer_handler,
+ NULL
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_fire_when",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_timer_reset */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_reset( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_reset",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_timer_cancel */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_timer_cancel( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_timer_cancel",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_semaphore_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_semaphore_create(
+ name,
+ 128,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ RTEMS_NO_PRIORITY,
+ &id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_semaphore_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_semaphore_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_semaphore_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_semaphore_ident( name, RTEMS_SEARCH_ALL_NODES, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_semaphore_obtain */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_semaphore_obtain( id, RTEMS_DEFAULT_OPTIONS, timeout );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_obtain",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_semaphore_release */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_semaphore_release( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_semaphore_release",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_create(
+ name,
+ 128,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_ident(
+ name,
+ RTEMS_SEARCH_ALL_NODES,
+ id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_send */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_send( id, (long (*)[4])buffer );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_send",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_urgent */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_urgent( id, (long (*)[4])buffer );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_urgent",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_broadcast */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_broadcast(
+ id,
+ (long (*)[4])buffer,
+ &count
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_broadcast",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_receive */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_receive(
+ id,
+ (long (*)[4])buffer,
+ RTEMS_DEFAULT_OPTIONS,
+ timeout
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_receive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_message_queue_flush */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_message_queue_flush( id, &count );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_message_queue_flush",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+rtems_test_pause();
+
+/* rtems_event_send */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_event_send( id, events );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_send",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_event_receive */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_event_receive(
+ RTEMS_EVENT_16,
+ RTEMS_DEFAULT_OPTIONS,
+ timeout,
+ &events
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_event_receive",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_signal_catch */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_signal_catch( Asr_handler, RTEMS_DEFAULT_MODES );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_signal_catch",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_signal_send */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_signal_send( id, signals );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_signal_send",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_partition_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_partition_create(
+ name,
+ Memory_area,
+ 2048,
+ 128,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_partition_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_partition_ident( name, RTEMS_SEARCH_ALL_NODES, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_partition_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_partition_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_partition_get_buffer */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_partition_get_buffer( id, address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_get_buffer",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_partition_return_buffer */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_partition_return_buffer( id, address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_partition_return_buffer",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_region_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_region_create(
+ name,
+ Memory_area,
+ 2048,
+ 128,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_region_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_region_ident( name, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_region_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_region_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_region_get_segment */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_region_get_segment(
+ id,
+ 243,
+ RTEMS_DEFAULT_OPTIONS,
+ timeout,
+ &address_1
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_get_segment",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_region_return_segment */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_region_return_segment( id, address_1 );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_region_return_segment",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_port_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_port_create(
+ name,
+ Internal_port_area,
+ External_port_area,
+ 0xff,
+ &id
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_port_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_port_ident( name, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_port_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_port_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_port_external_to_internal */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_port_external_to_internal(
+ id,
+ &External_port_area[ 7 ],
+ address_1
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_external_to_internal",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_port_internal_to_external */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_port_internal_to_external(
+ id,
+ &Internal_port_area[ 7 ],
+ address_1
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_port_internal_to_external",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+rtems_test_pause();
+
+/* rtems_io_initialize */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_io_initialize(
+ major,
+ minor,
+ address_1,
+ &io_result
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_initialize",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_io_open */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_io_open(
+ major,
+ minor,
+ address_1,
+ &io_result
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_open",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_io_close */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_io_close(
+ major,
+ minor,
+ address_1,
+ &io_result
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_close",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_io_read */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_io_read(
+ major,
+ minor,
+ address_1,
+ &io_result
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_read",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_io_write */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_io_write(
+ major,
+ minor,
+ address_1,
+ &io_result
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_write",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_io_control */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_io_control(
+ major,
+ minor,
+ address_1,
+ &io_result
+ );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_io_control",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_fatal_error_occurred */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_fatal_error_occurred( error );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_fatal_error_occurred",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_rate_monotonic_create */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_rate_monotonic_create( name, &id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_create",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_rate_monotonic_ident */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_rate_monotonic_ident( name, id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_ident",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_rate_monotonic_delete */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_rate_monotonic_delete( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_delete",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_rate_monotonic_cancel */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_rate_monotonic_cancel( id );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_cancel",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_rate_monotonic_period */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_rate_monotonic_period( id, timeout );
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_rate_monotonic_period",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+/* rtems_multiprocessing_announce */
+
+ Timer_initialize();
+ for ( index = 1 ; index <= OPERATION_COUNT ; index ++ )
+ (void) rtems_multiprocessing_announce();
+ end_time = Read_timer();
+
+ put_time(
+ "rtems_multiprocessing_announce",
+ end_time,
+ OPERATION_COUNT,
+ overhead,
+ 0
+ );
+
+ puts( "*** END OF TIME OVERHEAD ***" );
+
+ exit( 0 );
+}
diff --git a/testsuites/tmtests/tmoverhd/tmoverhd.doc b/testsuites/tmtests/tmoverhd/tmoverhd.doc
new file mode 100644
index 0000000000..2346fb9b52
--- /dev/null
+++ b/testsuites/tmtests/tmoverhd/tmoverhd.doc
@@ -0,0 +1,13 @@
+#
+# $Id$
+#
+# COPYRIGHT (c) 1989-1997.
+# On-Line Applications Research Corporation (OAR).
+# Copyright assigned to U.S. Government, 1994.
+#
+# The license and distribution terms for this file may in
+# the file LICENSE in this distribution or at
+# http://www.OARcorp.com/rtems/license.html.
+#
+
+