source: rtems/c/src/ada-tests/mptests/mp02/mptest.adb @ 9917d5da

4.104.114.84.95
Last change on this file since 9917d5da was bf9ae83, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:32:11

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

  • Property mode set to 100644
File size: 5.3 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 2 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32   package body PER_NODE_CONFIGURATION is separate;
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      STATUS : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEXT_IO.PUT( "*** TEST 2 -- NODE " );
47      UNSIGNED32_IO.PUT(
48         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
49         WIDTH => 1
50      );
51      TEXT_IO.PUT_LINE( " ***" );
52
53      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
54      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
55
56      TEXT_IO.PUT_LINE( "Creating test task (Global)" );
57
58      RTEMS.TASK_CREATE(
59         MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
60         1,
61         2048,
62         RTEMS.NO_PREEMPT,
63         RTEMS.GLOBAL,
64         MPTEST.TASK_ID( 1 ),
65         STATUS
66      );
67      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
68
69      RTEMS.TASK_START(
70         MPTEST.TASK_ID( 1 ),
71         MPTEST.TEST_TASK'ACCESS,
72         0,
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
76
77      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
78      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
79
80   end INIT;
81
82--PAGE
83--
84--  TEST_TASK
85--
86
87   procedure TEST_TASK (
88      ARGUMENT : in     RTEMS.TASK_ARGUMENT
89   ) is
90      TID         : RTEMS.ID;
91      TEST_TID    : RTEMS.ID;
92      REMOTE_TID  : RTEMS.ID;
93      REMOTE_NODE : RTEMS.UNSIGNED32;
94      NOTE        : RTEMS.UNSIGNED32;
95      STATUS      : RTEMS.STATUS_CODES;
96   begin
97
98      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
99      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
100   
101      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
102         REMOTE_NODE := 2;
103      else
104         REMOTE_NODE := 1;
105      end if;
106   
107      TEXT_IO.PUT_LINE( "Getting TID of remote task (all nodes)" );
108
109      loop
110
111         RTEMS.TASK_IDENT(
112            MPTEST.TASK_NAME( REMOTE_NODE ),
113            RTEMS.SEARCH_ALL_NODES,
114            REMOTE_TID,
115            STATUS
116         );
117
118         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
119
120      end loop;
121
122      --
123      --  We just got this ID above so looping is not necessary.
124      --
125
126      TEXT_IO.PUT_LINE( "Getting TID of remote task (1 node)" );
127      RTEMS.TASK_IDENT(
128         MPTEST.TASK_NAME( REMOTE_NODE ),
129         REMOTE_NODE,
130         TEST_TID,
131         STATUS
132      );
133      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT" );
134
135      if TEST_TID /= REMOTE_TID then
136         TEXT_IO.PUT_LINE( "task_ident tid's do not match!!" );
137         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
138      end if;
139
140      RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
141      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
142         STATUS,
143         RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
144         "task_delete of remote task"
145      );
146      TEXT_IO.PUT_LINE(
147         "task_delete of remote task returned the correct error"
148      );
149         
150      RTEMS.TASK_START( REMOTE_TID, MPTEST.TEST_TASK'ACCESS, 0, STATUS );
151      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
152         STATUS,
153         RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
154         "task_start of remote task"
155      );
156      TEXT_IO.PUT_LINE(
157         "task_start of remote task returned the correct error"
158      );
159         
160      RTEMS.TASK_RESTART( REMOTE_TID, 0, STATUS );
161      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
162         STATUS,
163         RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
164         "task_restart of remote task"
165      );
166      TEXT_IO.PUT_LINE(
167         "task_restart of remote task returned the correct error"
168      );
169         
170   
171      TEXT_IO.PUT( "Setting notepad " );
172      UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
173      TEXT_IO.PUT( " of the remote task to " );
174      UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
175      TEXT_IO.NEW_LINE;
176      RTEMS.TASK_SET_NOTE(
177         REMOTE_TID,
178         RTEMS.GET_NODE( TID ),
179         RTEMS.GET_NODE( TID ),
180         STATUS
181      );
182      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
183
184      TEXT_IO.PUT_LINE( "Getting a notepad of the remote task" );
185      RTEMS.TASK_GET_NOTE(
186         REMOTE_TID,
187         RTEMS.GET_NODE( TID ),
188         NOTE,
189         STATUS
190      );
191      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
192
193      if NOTE = RTEMS.GET_NODE( TID ) then
194         TEXT_IO.PUT_LINE( "Remote notepad set and read correctly" );
195      else
196         TEXT_IO.PUT(
197            "FAILURE!!! Remote notepad was not set and read correctly ("
198         );
199         UNSIGNED32_IO.PUT( NOTE );
200         TEXT_IO.PUT( ", " );
201         UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ) );
202         TEXT_IO.PUT_LINE( ")" );
203
204      end if;
205
206      RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
207      TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
208
209      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
210
211   end TEST_TASK;
212
213end MPTEST;
Note: See TracBrowser for help on using the repository browser.