source: rtems/c/src/ada-tests/mptests/mp14/mptest.adb @ 35e4691

4.104.114.84.95
Last change on this file since 35e4691 was 35e4691, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 18:50:41

2003-09-04 Joel Sherrill <joel@…>

  • mptests/mp01/config.h, mptests/mp01/mp01.adb, mptests/mp01/mptest.adb, mptests/mp01/mptest.ads, mptests/mp02/mptest.adb, mptests/mp02/mptest.ads, mptests/mp03/mptest.adb, mptests/mp03/mptest.ads, mptests/mp04/mptest.adb, mptests/mp04/mptest.ads, mptests/mp05/mptest.adb, mptests/mp05/mptest.ads, mptests/mp06/mptest.adb, mptests/mp06/mptest.ads, mptests/mp07/mptest.adb, mptests/mp07/mptest.ads, mptests/mp08/mptest.adb, mptests/mp08/mptest.ads, mptests/mp09/mptest.adb, mptests/mp09/mptest.ads, mptests/mp10/mptest.adb, mptests/mp10/mptest.ads, mptests/mp11/mptest.adb, mptests/mp11/mptest.ads, mptests/mp12/mptest.adb, mptests/mp12/mptest.ads, mptests/mp13/mptest.adb, mptests/mp13/mptest.ads, mptests/mp14/mptest.adb, mptests/mp14/mptest.ads, samples/base_mp/config.h, samples/base_mp/mptest.adb, samples/base_mp/mptest.ads, samples/base_sp/base_sp.adb, samples/base_sp/config.h, samples/base_sp/sptest.adb, samples/base_sp/sptest.ads, samples/hello/config.h, samples/hello/hello.adb, samples/hello/sptest.adb, samples/hello/sptest.ads, samples/ticker/config.h, samples/ticker/sptest.adb, samples/ticker/sptest.ads, samples/ticker/ticker.adb, sptests/sp01/config.h, sptests/sp01/sp01.adb, sptests/sp01/sptest.adb, sptests/sp01/sptest.ads, sptests/sp02/config.h, sptests/sp02/sp02.adb, sptests/sp02/sptest.adb, sptests/sp02/sptest.ads, sptests/sp03/config.h, sptests/sp03/sp03.adb, sptests/sp03/sptest.adb, sptests/sp03/sptest.ads, sptests/sp04/config.h, sptests/sp04/sp04.adb, sptests/sp04/sptest.adb, sptests/sp04/sptest.ads, sptests/sp05/config.h, sptests/sp05/sp05.adb, sptests/sp05/sptest.adb, sptests/sp05/sptest.ads, sptests/sp06/config.h, sptests/sp06/sp06.adb, sptests/sp06/sptest.adb, sptests/sp06/sptest.ads, sptests/sp07/config.h, sptests/sp07/sp07.adb, sptests/sp07/sptest.adb, sptests/sp07/sptest.ads, sptests/sp08/config.h, sptests/sp08/sp08.adb, sptests/sp08/sptest.adb, sptests/sp08/sptest.ads, sptests/sp09/config.h, sptests/sp09/sp09.adb, sptests/sp09/sptest.adb, sptests/sp09/sptest.ads, sptests/sp11/config.h, sptests/sp11/sp11.adb, sptests/sp11/sptest.adb, sptests/sp11/sptest.ads, sptests/sp12/config.h, sptests/sp12/sp12.adb, sptests/sp12/sptest.adb, sptests/sp12/sptest.ads, sptests/sp13/config.h, sptests/sp13/sp13.adb, sptests/sp13/sptest.adb, sptests/sp13/sptest.ads, sptests/sp14/config.h, sptests/sp14/sp14.adb, sptests/sp14/sptest.adb, sptests/sp14/sptest.ads, sptests/sp15/config.h, sptests/sp15/sp15.adb, sptests/sp15/sptest.adb, sptests/sp15/sptest.ads, sptests/sp16/config.h, sptests/sp16/sp16.adb, sptests/sp16/sptest.adb, sptests/sp16/sptest.ads, sptests/sp17/config.h, sptests/sp17/sp17.adb, sptests/sp17/sptest.adb, sptests/sp17/sptest.ads, sptests/sp19/config.h, sptests/sp19/sp19.adb, sptests/sp19/sptest.ads, sptests/sp20/config.h, sptests/sp20/sp20.adb, sptests/sp20/sptest.adb, sptests/sp20/sptest.ads, sptests/sp21/config.h, sptests/sp21/sp21.adb, sptests/sp21/sptest.adb, sptests/sp21/sptest.ads, sptests/sp22/config.h, sptests/sp22/sp22.adb, sptests/sp22/sptest.adb, sptests/sp22/sptest.ads, sptests/sp23/config.h, sptests/sp23/sp23.adb, sptests/sp23/sptest.adb, sptests/sp23/sptest.ads, sptests/sp24/config.h, sptests/sp24/sp24.adb, sptests/sp24/sptest.adb, sptests/sp24/sptest.ads, sptests/sp25/config.h, sptests/sp25/sp25.adb, sptests/sp25/sptest.adb, sptests/sp25/sptest.ads, sptests/spsize/spsize.adb, sptests/spsize/sptest.adb, sptests/spsize/sptest.ads, support/address_io.adb, support/address_io.ads, support/float_io.ads, support/fp.inc, support/integer.inc, support/rtems_calling_overhead.ads, support/status_io.ads, support/test_support.adb, support/test_support.ads, support/time_test_support.adb, support/time_test_support.ads, support/timer_driver.adb, support/timer_driver.ads, support/unsigned32_io.ads, tmtests/tm01/config.h, tmtests/tm01/tm01.adb, tmtests/tm01/tmtest.adb, tmtests/tm01/tmtest.ads, tmtests/tm02/config.h, tmtests/tm02/tm02.adb, tmtests/tm02/tmtest.adb, tmtests/tm02/tmtest.ads, tmtests/tm03/config.h, tmtests/tm03/tm03.adb, tmtests/tm03/tmtest.adb, tmtests/tm03/tmtest.ads, tmtests/tm04/config.h, tmtests/tm04/tm04.adb, tmtests/tm04/tmtest.adb, tmtests/tm04/tmtest.ads, tmtests/tm05/config.h, tmtests/tm05/tm05.adb, tmtests/tm05/tmtest.adb, tmtests/tm05/tmtest.ads, tmtests/tm06/config.h, tmtests/tm06/tm06.adb, tmtests/tm06/tmtest.adb, tmtests/tm06/tmtest.ads, tmtests/tm07/config.h, tmtests/tm07/tm07.adb, tmtests/tm07/tmtest.adb, tmtests/tm07/tmtest.ads, tmtests/tm08/config.h, tmtests/tm08/tm08.adb, tmtests/tm08/tmtest.adb, tmtests/tm08/tmtest.ads, tmtests/tm09/config.h, tmtests/tm09/tm09.adb, tmtests/tm09/tmtest.adb, tmtests/tm09/tmtest.ads, tmtests/tm10/config.h, tmtests/tm10/tm10.adb, tmtests/tm10/tmtest.adb, tmtests/tm10/tmtest.ads, tmtests/tm11/config.h, tmtests/tm11/tm11.adb, tmtests/tm11/tmtest.adb, tmtests/tm11/tmtest.ads, tmtests/tm12/config.h, tmtests/tm12/tm12.adb, tmtests/tm12/tmtest.adb, tmtests/tm12/tmtest.ads, tmtests/tm13/config.h, tmtests/tm13/tm13.adb, tmtests/tm13/tmtest.adb, tmtests/tm13/tmtest.ads, tmtests/tm14/config.h, tmtests/tm14/tm14.adb, tmtests/tm14/tmtest.adb, tmtests/tm14/tmtest.ads, tmtests/tm15/config.h, tmtests/tm15/tm15.adb, tmtests/tm15/tmtest.adb, tmtests/tm15/tmtest.ads, tmtests/tm16/config.h, tmtests/tm16/tm16.adb, tmtests/tm16/tmtest.adb, tmtests/tm16/tmtest.ads, tmtests/tm17/config.h, tmtests/tm17/tm17.adb, tmtests/tm17/tmtest.adb, tmtests/tm17/tmtest.ads, tmtests/tm18/config.h, tmtests/tm18/tm18.adb, tmtests/tm18/tmtest.adb, tmtests/tm18/tmtest.ads, tmtests/tm19/config.h, tmtests/tm19/tm19.adb, tmtests/tm19/tmtest.adb, tmtests/tm19/tmtest.ads, tmtests/tm20/config.h, tmtests/tm20/tm20.adb, tmtests/tm20/tmtest.adb, tmtests/tm20/tmtest.ads, tmtests/tm21/config.h, tmtests/tm21/tm21.adb, tmtests/tm21/tmtest.adb, tmtests/tm21/tmtest.ads, tmtests/tm22/config.h, tmtests/tm22/tm22.adb, tmtests/tm22/tmtest.adb, tmtests/tm22/tmtest.ads, tmtests/tm23/config.h, tmtests/tm23/tm23.adb, tmtests/tm23/tmtest.adb, tmtests/tm23/tmtest.ads, tmtests/tm24/config.h, tmtests/tm24/tm24.adb, tmtests/tm24/tmtest.adb, tmtests/tm24/tmtest.ads, tmtests/tm25/config.h, tmtests/tm25/tm25.adb, tmtests/tm25/tmtest.adb, tmtests/tm25/tmtest.ads, tmtests/tm28/config.h, tmtests/tm28/tm28.adb, tmtests/tm28/tmtest.adb, tmtests/tm28/tmtest.ads, tmtests/tm29/config.h, tmtests/tm29/tm29.adb, tmtests/tm29/tmtest.adb, tmtests/tm29/tmtest.ads, tmtests/tmck/config.h, tmtests/tmck/tmck.adb, tmtests/tmck/tmtest.adb, tmtests/tmck/tmtest.ads, tmtests/tmoverhd/config.h, tmtests/tmoverhd/dummy_rtems.adb, tmtests/tmoverhd/dummy_rtems.ads, tmtests/tmoverhd/tmoverhd.adb, tmtests/tmoverhd/tmtest.adb, tmtests/tmoverhd/tmtest.ads: URL for license changed.
  • Property mode set to 100644
File size: 19.0 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 14 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--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.com/license/LICENSE.
19--
20--  $Id$
21--
22
23with INTERFACES; use INTERFACES;
24with INTERFACES.C;
25with BSP;
26with RTEMS;
27with TEST_SUPPORT;
28with TEXT_IO;
29with UNSIGNED32_IO;
30
31package body MPTEST is
32
33   package body PER_NODE_CONFIGURATION is separate;
34
35--PAGE
36--
37--  STOP_TEST_TSR
38--
39 
40   procedure STOP_TEST_TSR (
41      IGNORED_ID      : in     RTEMS.ID;
42      IGNORED_ADDRESS : in     RTEMS.ADDRESS
43   ) is
44   begin
45 
46      MPTEST.STOP_TEST := TRUE;
47 
48   end STOP_TEST_TSR;
49 
50--PAGE
51--
52--  EXIT_TEST
53--
54 
55   procedure EXIT_TEST is
56      OLD_MODE : RTEMS.MODE;
57      STATUS   : RTEMS.STATUS_CODES;
58      procedure BSP_MPCI_PRINT_STATISTICS;
59      pragma Import (C, BSP_MPCI_PRINT_STATISTICS, "MPCI_Print_statistics" );
60   begin
61 
62      RTEMS.TASK_MODE( RTEMS.NO_PREEMPT, RTEMS.PREEMPT_MASK, OLD_MODE, STATUS );
63      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
64
65      BSP_MPCI_PRINT_STATISTICS;
66
67      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
68 
69   end EXIT_TEST;
70 
71--PAGE
72--
73--  INIT
74--
75
76   procedure INIT (
77      ARGUMENT : in     RTEMS.TASK_ARGUMENT
78   ) is
79      INDEX             : RTEMS.UNSIGNED32;
80      STATUS            : RTEMS.STATUS_CODES;
81      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
82   begin
83
84      TEXT_IO.NEW_LINE( 2 );
85      TEXT_IO.PUT( "*** TEST 14 -- NODE " );
86      UNSIGNED32_IO.PUT(
87         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
88         WIDTH => 1
89      );
90      TEXT_IO.PUT_LINE( " ***" );
91
92      MPTEST.STOP_TIMER_NAME := RTEMS.BUILD_NAME( 'S', 'T', 'O', 'P' );
93
94      MPTEST.STOP_TEST := FALSE;
95
96      RTEMS.TIMER_CREATE(
97         MPTEST.STOP_TIMER_NAME,
98         MPTEST.STOP_TIMER_ID,
99         STATUS
100      );
101      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
102
103      RTEMS.TIMER_FIRE_AFTER(
104         MPTEST.STOP_TIMER_ID,
105         BSP.MAXIMUM_LONG_TEST_DURATION * TEST_SUPPORT.TICKS_PER_SECOND,
106         MPTEST.STOP_TEST_TSR'ACCESS,
107         RTEMS.NULL_ADDRESS,
108         STATUS
109      );
110      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
111 
112      MPTEST.EVENT_TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
113      MPTEST.EVENT_TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
114
115      MPTEST.QUEUE_TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'M', 'T', '1', ' ' );
116      MPTEST.QUEUE_TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'M', 'T', '2', ' ' );
117
118      MPTEST.PARTITION_TASK_NAME( 1 ) :=
119         RTEMS.BUILD_NAME(  'P', 'T', '1', ' ' );
120      MPTEST.PARTITION_TASK_NAME( 2 ) :=
121         RTEMS.BUILD_NAME(  'P', 'T', '2', ' ' );
122
123      MPTEST.SEMAPHORE_TASK_NAME( 1 ) :=
124         RTEMS.BUILD_NAME(  'S', 'M', '1', ' ' );
125      MPTEST.SEMAPHORE_TASK_NAME( 2 ) :=
126         RTEMS.BUILD_NAME(  'S', 'M', '2', ' ' );
127
128      MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
129
130      MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'M', 'S', 'G', ' ' );
131
132      MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME(  'P', 'A', 'R', ' ' );
133
134      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', 'R', ' ' );
135
136      for INDEX in MPTEST.BUFFERS'FIRST .. MPTEST.BUFFERS'LAST
137      loop
138
139         MPTEST.BUFFERS( INDEX ) :=
140            RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREAS( INDEX )'ADDRESS );
141
142      end loop;
143
144      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
145
146         TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
147         RTEMS.SEMAPHORE_CREATE(
148            MPTEST.SEMAPHORE_NAME( 1 ),
149            1,
150            RTEMS.GLOBAL,
151            MPTEST.SEMAPHORE_ID( 1 ),
152            STATUS
153         );
154         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
155
156         TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
157         RTEMS.MESSAGE_QUEUE_CREATE(
158            MPTEST.QUEUE_NAME( 1 ),
159            1,
160            RTEMS.GLOBAL,
161            MPTEST.QUEUE_ID( 1 ),
162            STATUS
163         );
164         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
165
166         TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
167         RTEMS.PARTITION_CREATE(
168            MPTEST.PARTITION_NAME( 1 ),
169            MPTEST.PARTITION_AREA( 0 )'ADDRESS,
170            16#8000#,
171            16#3000#,
172            RTEMS.GLOBAL,
173            MPTEST.PARTITION_ID( 1 ),
174            STATUS
175         );
176         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
177
178      end if;
179
180      TEXT_IO.PUT_LINE( "Creating Event task (Global)" );
181      RTEMS.TASK_CREATE(
182         MPTEST.EVENT_TASK_NAME(
183            MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
184         ),
185         2,
186         2048,
187         RTEMS.TIMESLICE,
188         RTEMS.GLOBAL,
189         MPTEST.EVENT_TASK_ID( 1 ),
190         STATUS
191      );
192      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
193
194      TEXT_IO.PUT_LINE( "Starting Event task (Global)" );
195      RTEMS.TASK_START(
196         MPTEST.EVENT_TASK_ID( 1 ),
197         MPTEST.TEST_TASK'ACCESS,
198         0,
199         STATUS
200      );
201      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
202
203      TEXT_IO.PUT_LINE( "Creating Semaphore task (Global)" );
204      RTEMS.TASK_CREATE(
205         MPTEST.SEMAPHORE_TASK_NAME(
206            MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
207         ),
208         2,
209         2048,
210         RTEMS.TIMESLICE,
211         RTEMS.GLOBAL,
212         MPTEST.SEMAPHORE_TASK_ID( 1 ),
213         STATUS
214      );
215      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
216
217      TEXT_IO.PUT_LINE( "Starting Semaphore task (Global)" );
218      RTEMS.TASK_START(
219         MPTEST.SEMAPHORE_TASK_ID( 1 ),
220         MPTEST.SEMAPHORE_TASK'ACCESS,
221         0,
222         STATUS
223      );
224      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
225
226      TEXT_IO.PUT_LINE( "Creating Message Queue task (Global)" );
227      RTEMS.TASK_CREATE(
228         MPTEST.QUEUE_TASK_NAME(
229            MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
230         ),
231         2,
232         2048,
233         RTEMS.TIMESLICE,
234         RTEMS.GLOBAL,
235         MPTEST.QUEUE_TASK_ID( 1 ),
236         STATUS
237      );
238      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
239
240      TEXT_IO.PUT_LINE( "Starting Message Queue task (Global)" );
241      RTEMS.TASK_START(
242         MPTEST.QUEUE_TASK_ID( 1 ),
243         MPTEST.MESSAGE_QUEUE_TASK'ACCESS,
244         1,                          -- index of buffer
245         STATUS
246      );
247      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
248
249      TEXT_IO.PUT_LINE( "Creating Partition task (Global)" );
250      RTEMS.TASK_CREATE(
251         MPTEST.PARTITION_TASK_NAME(
252            MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
253         ),
254         2,
255         2048,
256         RTEMS.TIMESLICE,
257         RTEMS.GLOBAL,
258         MPTEST.PARTITION_TASK_ID( 1 ),
259         STATUS
260      );
261      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
262
263      TEXT_IO.PUT_LINE( "Starting Partition task (Global)" );
264      RTEMS.TASK_START(
265         MPTEST.PARTITION_TASK_ID( 1 ),
266         MPTEST.PARTITION_TASK'ACCESS,
267         0,
268         STATUS
269      );
270      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
271   
272      RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 2, PREVIOUS_PRIORITY, STATUS );
273      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
274
275      MPTEST.DELAYED_EVENTS_TASK( 1 );
276
277   end INIT;
278
279--
280--  DELAYED_SEND_EVENT
281--
282--  DESCRIPTION:
283--
284--  This subprogram is a timer service routine which sends an
285--  event set to a waiting task.
286--
287
288   procedure DELAYED_SEND_EVENT (
289      TIMER_ID        : in     RTEMS.ID;
290      IGNORED_ADDRESS : in     RTEMS.ADDRESS
291   ) is
292      STATUS : RTEMS.STATUS_CODES;
293   begin
294
295      RTEMS.EVENT_SEND(
296         MPTEST.TASK_ID( RTEMS.GET_INDEX( TIMER_ID ) ),
297         RTEMS.EVENT_16,
298         STATUS
299      );
300      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
301
302   end DELAYED_SEND_EVENT;
303 
304--
305--  TEST_TASK
306--
307--  DESCRIPTION:
308--
309--  This is one of the test tasks.
310--
311 
312   procedure TEST_TASK (
313      ARGUMENT : in     RTEMS.TASK_ARGUMENT
314   ) is
315      REMOTE_NODE : RTEMS.UNSIGNED32;
316      REMOTE_TID  : RTEMS.ID;
317      COUNT       : RTEMS.UNSIGNED32;
318      EVENT_OUT   : RTEMS.EVENT_SET;
319      STATUS      : RTEMS.STATUS_CODES;
320   begin
321
322      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
323         REMOTE_NODE := 2;
324      else
325         REMOTE_NODE := 1;
326      end if;
327
328      TEXT_IO.PUT_LINE( "About to go to sleep!" );
329      RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
330      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
331      TEXT_IO.PUT_LINE( "Waking up!" );
332 
333      TEXT_IO.PUT( "Remote task's name is : " );
334      TEST_SUPPORT.PUT_NAME( MPTEST.EVENT_TASK_NAME( REMOTE_NODE ), TRUE );
335
336      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
337
338      loop
339
340         RTEMS.TASK_IDENT(
341            MPTEST.EVENT_TASK_NAME( REMOTE_NODE ),
342            RTEMS.SEARCH_ALL_NODES,
343            REMOTE_TID,
344            STATUS
345         );
346
347         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
348
349         TEXT_IO.PUT_LINE( "task_ident" );
350
351      end loop;
352
353      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
354         TEXT_IO.PUT_LINE( "Sending events to remote task" );
355
356         loop
357            exit when MPTEST.STOP_TEST = TRUE;
358
359            for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
360            loop
361               RTEMS.EVENT_SEND(
362                  REMOTE_TID,
363                  RTEMS.EVENT_16,
364                  STATUS
365               );
366               TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
367
368               exit when MPTEST.STOP_TEST = TRUE;
369
370            end loop;
371
372            TEST_SUPPORT.PUT_DOT( "e" );
373 
374         end loop;
375
376      end if;
377         
378      TEXT_IO.PUT_LINE( "Receiving events from remote task" );
379
380      loop
381         exit when MPTEST.STOP_TEST = TRUE;
382
383         for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
384         loop
385            exit when MPTEST.STOP_TEST = TRUE;
386
387            RTEMS.EVENT_RECEIVE(
388               RTEMS.EVENT_16,
389               RTEMS.DEFAULT_OPTIONS,
390               RTEMS.NO_TIMEOUT,
391               EVENT_OUT,
392               STATUS
393            );   
394            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
395
396         end loop;
397 
398         TEST_SUPPORT.PUT_DOT( "e" );
399 
400      end loop;
401
402      MPTEST.EXIT_TEST;
403 
404   end TEST_TASK;
405 
406--
407--  DELAYED_EVENTS_TASK
408--
409--  DESCRIPTION:
410--
411--  This is one of the test tasks.
412--
413 
414   procedure DELAYED_EVENTS_TASK ( 
415      ARGUMENT : in     RTEMS.TASK_ARGUMENT
416   ) is
417      COUNT         : RTEMS.UNSIGNED32;
418      PREVIOUS_MODE : RTEMS.MODE;
419      EVENTS_OUT    : RTEMS.EVENT_SET;
420      STATUS        : RTEMS.STATUS_CODES;
421   begin
422
423      RTEMS.TASK_MODE(
424         RTEMS.PREEMPT + RTEMS.TIMESLICE,
425         RTEMS.PREEMPT_MASK + RTEMS.TIMESLICE_MASK,
426         PREVIOUS_MODE,
427         STATUS
428      );
429      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
430 
431      RTEMS.TIMER_CREATE(
432         MPTEST.TIMER_NAME( 1 ),
433         MPTEST.TIMER_ID( 1 ),
434         STATUS
435      );
436      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
437
438      RTEMS.TASK_IDENT(
439         RTEMS.SELF,
440         RTEMS.SEARCH_ALL_NODES,
441         MPTEST.TASK_ID( RTEMS.GET_INDEX( MPTEST.TIMER_ID( 1 ) ) ),
442         STATUS
443      );
444      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENTS" );
445
446      loop
447
448         for COUNT in 1 .. MPTEST.DELAYED_EVENT_DOT_COUNT
449         loop
450            RTEMS.TIMER_FIRE_AFTER(
451               MPTEST.TIMER_ID( 1 ),
452               1,
453               MPTEST.DELAYED_SEND_EVENT'ACCESS,
454               RTEMS.NULL_ADDRESS,
455               STATUS
456            );
457            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
458
459            RTEMS.EVENT_RECEIVE(
460               RTEMS.EVENT_16,
461               RTEMS.DEFAULT_OPTIONS,
462               RTEMS.NO_TIMEOUT,
463               EVENTS_OUT,
464               STATUS
465            );   
466            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
467
468         end loop;
469 
470         TEST_SUPPORT.PUT_DOT( "." );
471 
472      end loop;
473 
474      MPTEST.EXIT_TEST;
475     
476   end DELAYED_EVENTS_TASK;
477 
478--
479--  MESSAGE_QUEUE_TASK
480--
481--  DESCRIPTION:
482--
483--  This is one of the test tasks.
484--
485 
486   procedure MESSAGE_QUEUE_TASK ( 
487      INDEX : in     RTEMS.TASK_ARGUMENT
488   ) is
489      COUNT          : RTEMS.UNSIGNED32;
490      YIELD_COUNT    : RTEMS.UNSIGNED32;
491      OVERFLOW_COUNT : RTEMS.UNSIGNED32_POINTER;
492      BUFFER_COUNT   : RTEMS.UNSIGNED32_POINTER;
493      STATUS         : RTEMS.STATUS_CODES;
494   begin
495
496      MPTEST.BUFFERS( INDEX ).FIELD1 := 0;
497      MPTEST.BUFFERS( INDEX ).FIELD2 := 0;
498      MPTEST.BUFFERS( INDEX ).FIELD3 := 0;
499      MPTEST.BUFFERS( INDEX ).FIELD4 := 0;
500
501      TEXT_IO.PUT_LINE( "Getting ID of message queue" );
502
503      loop
504
505         RTEMS.MESSAGE_QUEUE_IDENT(
506            MPTEST.QUEUE_NAME( 1 ),
507            RTEMS.SEARCH_ALL_NODES,
508            MPTEST.QUEUE_ID( 1 ),
509            STATUS
510         );
511         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
512
513         TEXT_IO.PUT_LINE( "message_queue_ident FAILED!!" );
514
515      end loop;
516
517      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
518
519         RTEMS.MESSAGE_QUEUE_SEND(
520            MPTEST.QUEUE_ID( 1 ),
521            MPTEST.BUFFERS( INDEX ),
522            STATUS
523         );
524         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
525
526         OVERFLOW_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
527                              MPTEST.BUFFERS( INDEX ).FIELD1'ADDRESS
528                           );
529               
530         BUFFER_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
531                              MPTEST.BUFFERS( INDEX ).FIELD2'ADDRESS
532                           );
533               
534      else
535
536         OVERFLOW_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
537                              MPTEST.BUFFERS( INDEX ).FIELD3'ADDRESS
538                           );
539               
540         BUFFER_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
541                              MPTEST.BUFFERS( INDEX ).FIELD4'ADDRESS
542                           );
543
544      end if;
545
546      loop
547
548         exit when MPTEST.STOP_TEST = TRUE;
549
550         YIELD_COUNT := 100;
551
552         for COUNT in 1 .. MPTEST.MESSAGE_DOT_COUNT
553         loop
554
555           exit when MPTEST.STOP_TEST = TRUE;
556
557            RTEMS.MESSAGE_QUEUE_RECEIVE(
558               MPTEST.QUEUE_ID( 1 ),
559               MPTEST.BUFFERS( INDEX ),
560               RTEMS.DEFAULT_OPTIONS,
561               RTEMS.NO_TIMEOUT,
562               STATUS
563            );
564            TEST_SUPPORT.DIRECTIVE_FAILED(
565               STATUS,
566               "MESSAGE_QUEUE_RECEIVE"
567            );
568
569            if BUFFER_COUNT.ALL = RTEMS.UNSIGNED32'LAST then
570               BUFFER_COUNT.ALL   := 0;
571               OVERFLOW_COUNT.ALL := OVERFLOW_COUNT.ALL + 1;
572            else
573               BUFFER_COUNT.ALL := BUFFER_COUNT.ALL + 1;
574            end if;
575
576            RTEMS.MESSAGE_QUEUE_SEND(
577               MPTEST.QUEUE_ID( 1 ),
578               MPTEST.BUFFERS( INDEX ),
579               STATUS
580            );
581            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
582
583            if MPTEST.STOP_TEST = FALSE then
584               if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
585
586                  YIELD_COUNT := YIELD_COUNT - 1;
587
588                  if YIELD_COUNT = 0 then
589
590                     RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
591                     TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
592
593                     YIELD_COUNT := 100;
594
595                  end if;
596
597               end if;
598
599            end if;
600         
601         end loop;
602
603         TEST_SUPPORT.PUT_DOT( "m" );
604
605      end loop;
606
607      MPTEST.EXIT_TEST;
608
609   end MESSAGE_QUEUE_TASK;
610 
611--
612--  PARTITION_TASK
613--
614--  DESCRIPTION:
615--
616--  This is one of the test tasks.
617--
618 
619   procedure PARTITION_TASK ( 
620      IGNORED : in     RTEMS.TASK_ARGUMENT
621   ) is
622      COUNT  : RTEMS.UNSIGNED32;
623      BUFFER : RTEMS.ADDRESS;
624      STATUS : RTEMS.STATUS_CODES;
625   begin
626
627      TEXT_IO.PUT_LINE( "Getting ID of partition" );
628 
629      loop
630
631         RTEMS.PARTITION_IDENT(
632            MPTEST.PARTITION_NAME( 1 ),
633            RTEMS.SEARCH_ALL_NODES,
634            MPTEST.PARTITION_ID( 1 ),
635            STATUS
636         );
637         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
638
639         TEXT_IO.PUT_LINE( "partition_ident FAILED!!" );
640
641      end loop;
642
643      loop
644
645         exit when MPTEST.STOP_TEST = TRUE;
646
647         for COUNT in 1 .. MPTEST.PARTITION_DOT_COUNT
648         loop
649
650            exit when MPTEST.STOP_TEST = TRUE;
651
652            RTEMS.PARTITION_GET_BUFFER(
653               MPTEST.PARTITION_ID( 1 ),
654               BUFFER,
655               STATUS
656            );
657            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
658
659            RTEMS.PARTITION_RETURN_BUFFER(
660               MPTEST.PARTITION_ID( 1 ),
661               BUFFER,
662               STATUS
663            );
664            TEST_SUPPORT.DIRECTIVE_FAILED(
665               STATUS,
666               "PARTITION_RETURN_BUFFER"
667            );
668
669            if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
670
671               RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
672               TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
673
674            end if;
675
676         end loop;
677
678         TEST_SUPPORT.PUT_DOT( "p" );
679
680      end loop;
681
682      MPTEST.EXIT_TEST;
683
684   end PARTITION_TASK;
685 
686--
687--  SEMAPHORE_TASK
688--
689--  DESCRIPTION:
690--
691--  This is one of the test tasks.
692--
693 
694   procedure SEMAPHORE_TASK ( 
695      ARGUMENT : in     RTEMS.TASK_ARGUMENT
696   ) is
697      COUNT          : RTEMS.UNSIGNED32;
698      YIELD_COUNT    : RTEMS.UNSIGNED32;
699      STATUS         : RTEMS.STATUS_CODES;
700   begin
701
702      TEXT_IO.PUT_LINE( "Getting ID of semaphore" );
703
704      loop
705
706         RTEMS.SEMAPHORE_IDENT(
707            MPTEST.SEMAPHORE_NAME( 1 ),
708            RTEMS.SEARCH_ALL_NODES,
709            MPTEST.SEMAPHORE_ID( 1 ),
710            STATUS
711         );
712         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
713
714         TEXT_IO.PUT_LINE( "semaphore_ident FAILED!!" );
715
716      end loop;
717
718      loop
719
720         YIELD_COUNT := 100;
721
722         exit when MPTEST.STOP_TEST = TRUE;
723
724         for COUNT in 1 .. MPTEST.SEMAPHORE_DOT_COUNT
725         loop
726
727            exit when MPTEST.STOP_TEST = TRUE;
728
729            RTEMS.SEMAPHORE_OBTAIN(
730               MPTEST.SEMAPHORE_ID( 1 ),
731               RTEMS.DEFAULT_OPTIONS,
732               RTEMS.NO_TIMEOUT,
733               STATUS
734            );
735            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
736
737            RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
738            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
739
740            if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
741
742               YIELD_COUNT := YIELD_COUNT - 1;
743
744               if YIELD_COUNT = 0 then
745
746                  RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
747                  TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
748
749                  YIELD_COUNT := 100;
750
751               end if;
752
753            end if;
754         
755         end loop;
756
757         TEST_SUPPORT.PUT_DOT( "s" );
758
759      end loop;
760
761      MPTEST.EXIT_TEST;
762
763   end SEMAPHORE_TASK;
764 
765end MPTEST;
Note: See TracBrowser for help on using the repository browser.