source: rtems/c/src/ada-tests/mptests/mp14/mptest.adb @ 190f5c23

4.104.114.84.95
Last change on this file since 190f5c23 was 190f5c23, checked in by Joel Sherrill <joel.sherrill@…>, on 08/26/02 at 14:27:21

2002-08-26 Joel Sherrill <joel@…>

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