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

4.115
Last change on this file since 3c4d8cd1 was 3c4d8cd1, checked in by Joel Sherrill <joel.sherrill@…>, on 02/16/11 at 15:53:16

2011-02-16 Joel Sherrill <joel.sherrill@…>

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