source: rtems/c/src/ada-tests/mptests/mp10/mptest.adb @ 6d4e604b

4.104.114.84.95
Last change on this file since 6d4e604b was 6d4e604b, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 2, 1997 at 8:19:03 PM

Initial revision

  • Property mode set to 100644
File size: 7.8 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 10 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11--
12--
13--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
14--  On-Line Applications Research Corporation (OAR).
15--  All rights assigned to U.S. Government, 1994.
16--
17--  This material may be reproduced by or for the U.S. Government pursuant
18--  to the copyright license under the clause at DFARS 252.227-7013.  This
19--  notice must appear in all copies of this file and its derivatives.
20--
21--  mptest.adb,v 1.3 1995/07/12 19:39:54 joel Exp
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 10 -- NODE " );
47      UNSIGNED32_IO.PUT(
48         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
49         WIDTH => 1
50      );
51      TEXT_IO.PUT_LINE( " ***" );
52
53
54      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
55      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
56      MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'S', 'A', '3', ' ' );
57
58      MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'M', 'S', 'G', ' ' );
59
60      MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
61
62      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
63
64         TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
65         RTEMS.MESSAGE_QUEUE_CREATE(
66            MPTEST.QUEUE_NAME( 1 ),
67            3,
68            RTEMS.GLOBAL + RTEMS.LIMIT,
69            MPTEST.QUEUE_ID( 1 ),
70            STATUS
71         );
72         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
73
74         TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
75         RTEMS.SEMAPHORE_CREATE(
76            MPTEST.SEMAPHORE_NAME( 1 ),
77            0,
78            RTEMS.GLOBAL + RTEMS.PRIORITY,
79            MPTEST.SEMAPHORE_ID( 1 ),
80            STATUS
81         );
82         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
83
84         RTEMS.TASK_WAKE_AFTER( 10 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
85         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
86
87      else
88
89         TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
90         RTEMS.TASK_CREATE(
91            MPTEST.TASK_NAME( 1 ),
92            1,
93            2048,
94            RTEMS.TIMESLICE,
95            RTEMS.DEFAULT_ATTRIBUTES,
96            MPTEST.TASK_ID( 1 ),
97            STATUS
98         );
99         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
100
101         TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
102         RTEMS.TASK_START(
103            MPTEST.TASK_ID( 1 ),
104            MPTEST.TEST_TASK_1'ACCESS,
105            0,
106            STATUS
107         );
108         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
109
110         TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
111         RTEMS.TASK_CREATE(
112            MPTEST.TASK_NAME( 2 ),
113            1,
114            2048,
115            RTEMS.TIMESLICE,
116            RTEMS.DEFAULT_ATTRIBUTES,
117            MPTEST.TASK_ID( 2 ),
118            STATUS
119         );   
120         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
121 
122         TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
123         RTEMS.TASK_START(
124            MPTEST.TASK_ID( 2 ),
125            MPTEST.TEST_TASK_2'ACCESS,
126            0,
127            STATUS
128         );   
129         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
130
131         TEXT_IO.PUT_LINE( "Creating Test_task 3 (local)" );
132         RTEMS.TASK_CREATE(
133            MPTEST.TASK_NAME( 3 ),
134            1,
135            2048,
136            RTEMS.TIMESLICE,
137            RTEMS.DEFAULT_ATTRIBUTES,
138            MPTEST.TASK_ID( 3 ),
139            STATUS
140         );   
141         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
142 
143         TEXT_IO.PUT_LINE( "Starting Test_task 3 (local)" );
144         RTEMS.TASK_START(
145            MPTEST.TASK_ID( 3 ),
146            MPTEST.TEST_TASK_3'ACCESS,
147            0,
148            STATUS
149         );   
150         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
151
152         TEXT_IO.PUT_LINE( "Sleeping for 1 second ..." );
153         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
154         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
155
156         TEXT_IO.PUT_LINE( "Deleting Test_task 2" );
157         RTEMS.TASK_DELETE( MPTEST.TASK_ID( 2 ), STATUS );
158         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 2" );
159
160         TEXT_IO.PUT_LINE( "Deleting Test_task 1" );
161         RTEMS.TASK_DELETE( MPTEST.TASK_ID( 1 ), STATUS );
162         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 1" );
163
164         TEXT_IO.PUT_LINE( "Restarting Test_task 3" );
165         RTEMS.TASK_RESTART( MPTEST.TASK_ID( 3 ), 1, STATUS );
166         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF 3" );
167
168      end if;
169
170      TEXT_IO.PUT_LINE( "*** END OF TEST 10 ***" );
171
172      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
173
174   end INIT;
175
176--PAGE
177--
178--  TEST_TASK_1
179--
180
181   procedure TEST_TASK_1 (
182      ARGUMENT : in     RTEMS.TASK_ARGUMENT
183   ) is
184      COUNT               : RTEMS.UNSIGNED32;
185      RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
186      RECEIVE_BUFFER      : RTEMS.BUFFER_POINTER;
187      STATUS              : RTEMS.STATUS_CODES;
188   begin
189
190      RECEIVE_BUFFER :=
191         RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
192
193      TEXT_IO.PUT_LINE( "Getting QID of message queue" );
194
195      loop
196
197         RTEMS.MESSAGE_QUEUE_IDENT(
198            MPTEST.QUEUE_NAME( 1 ),
199            RTEMS.SEARCH_ALL_NODES,
200            MPTEST.QUEUE_ID( 1 ),
201            STATUS
202         );
203
204         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
205
206      end loop;
207
208      TEXT_IO.PUT_LINE( "Attempting to receive message ..." );
209      RTEMS.MESSAGE_QUEUE_RECEIVE(
210         MPTEST.QUEUE_ID( 1 ),
211         RECEIVE_BUFFER,
212         RTEMS.DEFAULT_OPTIONS,
213         RTEMS.NO_TIMEOUT,
214         STATUS
215      );
216      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
217
218   end TEST_TASK_1;
219
220--PAGE
221--
222--  TEST_TASK_2
223--
224 
225   procedure TEST_TASK_2 (
226      ARGUMENT : in     RTEMS.TASK_ARGUMENT
227   ) is
228      STATUS : RTEMS.STATUS_CODES;
229   begin 
230 
231      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
232
233      loop
234
235         RTEMS.SEMAPHORE_IDENT(
236            MPTEST.SEMAPHORE_NAME( 1 ),
237            RTEMS.SEARCH_ALL_NODES,
238            MPTEST.SEMAPHORE_ID( 1 ),
239            STATUS
240         ); 
241 
242         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
243
244      end loop;
245
246      TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
247      RTEMS.SEMAPHORE_OBTAIN(
248         MPTEST.SEMAPHORE_ID( 1 ),
249         RTEMS.DEFAULT_OPTIONS,
250         RTEMS.NO_TIMEOUT,
251         STATUS
252      ); 
253      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
254 
255   end TEST_TASK_2;
256
257--PAGE
258--
259--  TEST_TASK_3
260--
261 
262   procedure TEST_TASK_3 ( 
263      RESTART : in     RTEMS.TASK_ARGUMENT 
264   ) is 
265      STATUS : RTEMS.STATUS_CODES;
266   begin
267
268      if RESTART = 1 then
269
270         RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); 
271         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
272
273      end if;
274
275      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
276
277      loop
278
279         RTEMS.SEMAPHORE_IDENT(
280            MPTEST.SEMAPHORE_NAME( 1 ),
281            RTEMS.SEARCH_ALL_NODES,
282            MPTEST.SEMAPHORE_ID( 1 ),
283            STATUS   
284         ); 
285
286         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
287
288      end loop;
289
290      TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
291      RTEMS.SEMAPHORE_OBTAIN(
292         MPTEST.SEMAPHORE_ID( 1 ),
293         RTEMS.DEFAULT_OPTIONS,
294         RTEMS.NO_TIMEOUT, 
295         STATUS 
296      ); 
297      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
298 
299   end TEST_TASK_3; 
300 
301end MPTEST;
Note: See TracBrowser for help on using the repository browser.