source: rtems/c/src/ada-tests/mptests/mp14/mptest.adb @ 3a23218

4.104.115
Last change on this file since 3a23218 was 3a23218, checked in by Joel Sherrill <joel.sherrill@…>, on 12/14/09 at 21:28:54

2009-12-14 Joel Sherrill <joel.sherrill@…>

  • mptests/mp01/node1/mp01_node1.adb, mptests/mp01/node2/mp01_node2.adb, mptests/mp02/node1/mp02_node1.adb, mptests/mp02/node2/mp02_node2.adb, mptests/mp03/node1/mp03_node1.adb, mptests/mp03/node2/mp03_node2.adb, mptests/mp04/node1/mp04_node1.adb, mptests/mp04/node2/mp04_node2.adb, mptests/mp05/mptest.adb, mptests/mp05/node1/mp05_node1.adb, mptests/mp05/node2/mp05_node2.adb, mptests/mp06/node1/mp06_node1.adb, mptests/mp06/node2/mp06_node2.adb, mptests/mp07/node1/mp07_node1.adb, mptests/mp07/node2/mp07_node2.adb, mptests/mp08/node1/mp08_node1.adb, mptests/mp08/node2/mp08_node2.adb, mptests/mp09/node1/mp09_node1.adb, mptests/mp09/node2/mp09_node2.adb, mptests/mp10/node1/mp10_node1.adb, mptests/mp10/node2/mp10_node2.adb, mptests/mp11/node1/mp11_node1.adb, mptests/mp11/node2/mp11_node2.adb, mptests/mp12/node1/mp12_node1.adb, mptests/mp12/node2/mp12_node2.adb, mptests/mp13/node1/mp13_node1.adb, mptests/mp13/node2/mp13_node2.adb, mptests/mp14/mptest.adb, mptests/mp14/node1/mp14_node1.adb, mptests/mp14/node2/mp14_node2.adb, sptests/sp09/sptest.adb, sptests/sp11/sptest.adb, sptests/sp13/sptest.adb, sptests/sp16/sptest.adb, support/test_support.adb: Lines are now all less than 80 columns.
  • Property mode set to 100644
File size: 18.7 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 RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30with System.Storage_Elements; use System.Storage_Elements;
31
32package body MPTEST is
33
34--PAGE
35--
36--  STOP_TEST_TSR
37--
38 
39   procedure STOP_TEST_TSR (
40      IGNORED_ID      : in     RTEMS.ID;
41      IGNORED_ADDRESS : in     RTEMS.ADDRESS
42   ) is
43   begin
44 
45      MPTEST.STOP_TEST := TRUE;
46 
47   end STOP_TEST_TSR;
48 
49--PAGE
50--
51--  EXIT_TEST
52--
53 
54   procedure EXIT_TEST is
55      OLD_MODE : RTEMS.MODE;
56      STATUS   : RTEMS.STATUS_CODES;
57      procedure BSP_MPCI_PRINT_STATISTICS;
58      pragma Import (C, BSP_MPCI_PRINT_STATISTICS, "MPCI_Print_statistics" );
59   begin
60 
61      RTEMS.TASK_MODE(RTEMS.NO_PREEMPT, RTEMS.PREEMPT_MASK, OLD_MODE, STATUS);
62      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
63
64      BSP_MPCI_PRINT_STATISTICS;
65
66      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
67 
68   end EXIT_TEST;
69 
70--PAGE
71--
72--  INIT
73--
74
75   procedure INIT (
76      ARGUMENT : in     RTEMS.TASK_ARGUMENT
77   ) is
78      INDEX             : RTEMS.UNSIGNED32;
79      STATUS            : RTEMS.STATUS_CODES;
80      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
81   begin
82
83      TEXT_IO.NEW_LINE( 2 );
84      TEXT_IO.PUT( "*** TEST 14 -- NODE " );
85      UNSIGNED32_IO.PUT(
86         TEST_SUPPORT.NODE,
87         WIDTH => 1
88      );
89      TEXT_IO.PUT_LINE( " ***" );
90
91      MPTEST.STOP_TIMER_NAME := RTEMS.BUILD_NAME( 'S', 'T', 'O', 'P' );
92
93      MPTEST.STOP_TEST := FALSE;
94
95      RTEMS.TIMER_CREATE(
96         MPTEST.STOP_TIMER_NAME,
97         MPTEST.STOP_TIMER_ID,
98         STATUS
99      );
100      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
101
102      RTEMS.TIMER_FIRE_AFTER(
103         MPTEST.STOP_TIMER_ID,
104         TEST_SUPPORT.MAXIMUM_LONG_TEST_DURATION *
105            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            MPTEST.BUFFER_AREAS( INDEX )'ADDRESS;
141
142      end loop;
143
144      if TEST_SUPPORT.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            TEST_SUPPORT.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            TEST_SUPPORT.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            TEST_SUPPORT.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            TEST_SUPPORT.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 TEST_SUPPORT.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 TEST_SUPPORT.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 TEST_SUPPORT.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 TEST_SUPPORT.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 TEST_SUPPORT.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 TEST_SUPPORT.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.