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

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on Mar 20, 2014 at 9:10:47 PM

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 18.8 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-2011.
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.org/license/LICENSE.
19--
20
21with INTERFACES; use INTERFACES;
22with INTERFACES.C;
23with RTEMS;
24with RTEMS.EVENT;
25with RTEMS.MESSAGE_QUEUE;
26with RTEMS.PARTITION;
27with RTEMS.SEMAPHORE;
28with RTEMS.TASKS;
29with RTEMS.TIMER;
30with TEST_SUPPORT;
31with TEXT_IO;
32with UNSIGNED32_IO;
33
34with System.Storage_Elements; use System.Storage_Elements;
35
36package body MPTEST is
37
38--
39--  STOP_TEST_TSR
40--
41 
42   procedure STOP_TEST_TSR (
43      IGNORED_ID      : in     RTEMS.ID;
44      IGNORED_ADDRESS : in     RTEMS.ADDRESS
45   ) is
46   begin
47 
48      MPTEST.STOP_TEST := TRUE;
49 
50   end STOP_TEST_TSR;
51 
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.TASKS.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--
73--  INIT
74--
75
76   procedure INIT (
77      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
78   ) is
79      INDEX             : RTEMS.UNSIGNED32;
80      STATUS            : RTEMS.STATUS_CODES;
81      PREVIOUS_PRIORITY : RTEMS.TASKS.PRIORITY;
82   begin
83
84      TEXT_IO.NEW_LINE( 2 );
85      TEXT_IO.PUT( "*** TEST 14 -- NODE " );
86      UNSIGNED32_IO.PUT(
87         TEST_SUPPORT.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         TEST_SUPPORT.MAXIMUM_LONG_TEST_DURATION *
106            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            MPTEST.BUFFER_AREAS( INDEX )'ADDRESS;
142
143      end loop;
144
145      if TEST_SUPPORT.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.TASKS.CREATE(
183         MPTEST.EVENT_TASK_NAME(
184            TEST_SUPPORT.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.TASKS.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.TASKS.CREATE(
206         MPTEST.SEMAPHORE_TASK_NAME(
207            TEST_SUPPORT.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.TASKS.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.TASKS.CREATE(
229         MPTEST.QUEUE_TASK_NAME(
230            TEST_SUPPORT.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.TASKS.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.TASKS.CREATE(
252         MPTEST.PARTITION_TASK_NAME(
253            TEST_SUPPORT.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.TASKS.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.TASKS.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.TASKS.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 TEST_SUPPORT.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.TASKS.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.TASKS.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 TEST_SUPPORT.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.TASKS.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.TASKS.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.TASKS.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.TASKS.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 TEST_SUPPORT.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 TEST_SUPPORT.NODE = 1 then
586
587                  YIELD_COUNT := YIELD_COUNT - 1;
588
589                  if YIELD_COUNT = 0 then
590
591                     RTEMS.TASKS.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.TASKS.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 TEST_SUPPORT.NODE = 1 then
671
672               RTEMS.TASKS.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.TASKS.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 TEST_SUPPORT.NODE = 1 then
742
743               YIELD_COUNT := YIELD_COUNT - 1;
744
745               if YIELD_COUNT = 0 then
746
747                  RTEMS.TASKS.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.