Warning, /testsuites/ada/mptests/mp14/mptest.adb is written in an unsupported language. File is not indexed.
0001 -- SPDX-License-Identifier: BSD-2-Clause
0002
0003 --
0004 -- MPTEST / BODY
0005 --
0006 -- DESCRIPTION:
0007 --
0008 -- This package is the implementation for Test 14 of the RTEMS
0009 -- Multiprocessor Test Suite.
0010 --
0011 -- DEPENDENCIES:
0012 --
0013 --
0014 --
0015 -- COPYRIGHT (c) 1989-2011.
0016 -- On-Line Applications Research Corporation (OAR).
0017 --
0018 -- Redistribution and use in source and binary forms, with or without
0019 -- modification, are permitted provided that the following conditions
0020 -- are met:
0021 -- 1. Redistributions of source code must retain the above copyright
0022 -- notice, this list of conditions and the following disclaimer.
0023 -- 2. Redistributions in binary form must reproduce the above copyright
0024 -- notice, this list of conditions and the following disclaimer in the
0025 -- documentation and/or other materials provided with the distribution.
0026 --
0027 -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0028 -- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0029 -- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0030 -- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0031 -- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0032 -- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0033 -- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0034 -- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0035 -- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0036 -- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0037 -- POSSIBILITY OF SUCH DAMAGE.
0038 --
0039
0040 with INTERFACES; use INTERFACES;
0041 with RTEMS.EVENT;
0042 with RTEMS.MESSAGE_QUEUE;
0043 with RTEMS.PARTITION;
0044 with RTEMS.SEMAPHORE;
0045 with RTEMS.TIMER;
0046 with TEST_SUPPORT;
0047 with TEXT_IO;
0048 with UNSIGNED32_IO;
0049
0050 package body MPTEST is
0051
0052 --
0053 -- STOP_TEST_TSR
0054 --
0055
0056 procedure STOP_TEST_TSR (
0057 IGNORED_ID : in RTEMS.ID;
0058 IGNORED_ADDRESS : in RTEMS.ADDRESS
0059 ) is
0060 begin
0061
0062 MPTEST.STOP_TEST := TRUE;
0063
0064 end STOP_TEST_TSR;
0065
0066 --
0067 -- EXIT_TEST
0068 --
0069
0070 procedure EXIT_TEST is
0071 OLD_MODE : RTEMS.MODE;
0072 STATUS : RTEMS.STATUS_CODES;
0073 begin
0074
0075 RTEMS.TASKS.MODE(RTEMS.NO_PREEMPT, RTEMS.PREEMPT_MASK, OLD_MODE, STATUS);
0076 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0077
0078 RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0079
0080 end EXIT_TEST;
0081
0082 --
0083 -- INIT
0084 --
0085
0086 procedure INIT (
0087 ARGUMENT : in RTEMS.TASKS.ARGUMENT
0088 ) is
0089 pragma Unreferenced(ARGUMENT);
0090 STATUS : RTEMS.STATUS_CODES;
0091 PREVIOUS_PRIORITY : RTEMS.TASKS.PRIORITY;
0092 begin
0093
0094 TEXT_IO.NEW_LINE( 2 );
0095 TEST_SUPPORT.ADA_TEST_BEGIN;
0096 TEXT_IO.PUT( "*** NODE " );
0097 UNSIGNED32_IO.PUT(
0098 TEST_SUPPORT.NODE,
0099 WIDTH => 1
0100 );
0101 TEXT_IO.PUT_LINE( " ***" );
0102
0103 MPTEST.STOP_TIMER_NAME := RTEMS.BUILD_NAME( 'S', 'T', 'O', 'P' );
0104
0105 MPTEST.STOP_TEST := FALSE;
0106
0107 RTEMS.TIMER.CREATE(
0108 MPTEST.STOP_TIMER_NAME,
0109 MPTEST.STOP_TIMER_ID,
0110 STATUS
0111 );
0112 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
0113
0114 RTEMS.TIMER.FIRE_AFTER(
0115 MPTEST.STOP_TIMER_ID,
0116 TEST_SUPPORT.MAXIMUM_LONG_TEST_DURATION *
0117 TEST_SUPPORT.TICKS_PER_SECOND,
0118 MPTEST.STOP_TEST_TSR'ACCESS,
0119 RTEMS.NULL_ADDRESS,
0120 STATUS
0121 );
0122 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
0123
0124 MPTEST.EVENT_TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
0125 MPTEST.EVENT_TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
0126
0127 MPTEST.QUEUE_TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'T', '1', ' ' );
0128 MPTEST.QUEUE_TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'M', 'T', '2', ' ' );
0129
0130 MPTEST.PARTITION_TASK_NAME( 1 ) :=
0131 RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
0132 MPTEST.PARTITION_TASK_NAME( 2 ) :=
0133 RTEMS.BUILD_NAME( 'P', 'T', '2', ' ' );
0134
0135 MPTEST.SEMAPHORE_TASK_NAME( 1 ) :=
0136 RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
0137 MPTEST.SEMAPHORE_TASK_NAME( 2 ) :=
0138 RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
0139
0140 MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
0141
0142 MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
0143
0144 MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
0145
0146 MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', 'R', ' ' );
0147
0148 for INDEX in MPTEST.BUFFERS'FIRST .. MPTEST.BUFFERS'LAST
0149 loop
0150
0151 MPTEST.BUFFERS( INDEX ) :=
0152 MPTEST.BUFFER_AREAS( INDEX )'ADDRESS;
0153
0154 end loop;
0155
0156 if TEST_SUPPORT.NODE = 1 then
0157
0158 TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
0159 RTEMS.SEMAPHORE.CREATE(
0160 MPTEST.SEMAPHORE_NAME( 1 ),
0161 1,
0162 RTEMS.GLOBAL,
0163 RTEMS.TASKS.NO_PRIORITY,
0164 MPTEST.SEMAPHORE_ID( 1 ),
0165 STATUS
0166 );
0167 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
0168
0169 TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
0170 RTEMS.MESSAGE_QUEUE.CREATE(
0171 MPTEST.QUEUE_NAME( 1 ),
0172 1,
0173 1,
0174 RTEMS.GLOBAL,
0175 MPTEST.QUEUE_ID( 1 ),
0176 STATUS
0177 );
0178 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
0179
0180 TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
0181 RTEMS.PARTITION.CREATE(
0182 MPTEST.PARTITION_NAME( 1 ),
0183 MPTEST.PARTITION_AREA( 0 )'ADDRESS,
0184 16#8000#,
0185 16#3000#,
0186 RTEMS.GLOBAL,
0187 MPTEST.PARTITION_ID( 1 ),
0188 STATUS
0189 );
0190 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
0191
0192 end if;
0193
0194 TEXT_IO.PUT_LINE( "Creating Event task (Global)" );
0195 RTEMS.TASKS.CREATE(
0196 MPTEST.EVENT_TASK_NAME(
0197 TEST_SUPPORT.NODE
0198 ),
0199 2,
0200 2048,
0201 RTEMS.TIMESLICE,
0202 RTEMS.GLOBAL,
0203 MPTEST.EVENT_TASK_ID( 1 ),
0204 STATUS
0205 );
0206 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
0207
0208 TEXT_IO.PUT_LINE( "Starting Event task (Global)" );
0209 RTEMS.TASKS.START(
0210 MPTEST.EVENT_TASK_ID( 1 ),
0211 MPTEST.TEST_TASK'ACCESS,
0212 0,
0213 STATUS
0214 );
0215 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
0216
0217 TEXT_IO.PUT_LINE( "Creating Semaphore task (Global)" );
0218 RTEMS.TASKS.CREATE(
0219 MPTEST.SEMAPHORE_TASK_NAME(
0220 TEST_SUPPORT.NODE
0221 ),
0222 2,
0223 2048,
0224 RTEMS.TIMESLICE,
0225 RTEMS.GLOBAL,
0226 MPTEST.SEMAPHORE_TASK_ID( 1 ),
0227 STATUS
0228 );
0229 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
0230
0231 TEXT_IO.PUT_LINE( "Starting Semaphore task (Global)" );
0232 RTEMS.TASKS.START(
0233 MPTEST.SEMAPHORE_TASK_ID( 1 ),
0234 MPTEST.SEMAPHORE_TASK'ACCESS,
0235 0,
0236 STATUS
0237 );
0238 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
0239
0240 TEXT_IO.PUT_LINE( "Creating Message Queue task (Global)" );
0241 RTEMS.TASKS.CREATE(
0242 MPTEST.QUEUE_TASK_NAME(
0243 TEST_SUPPORT.NODE
0244 ),
0245 2,
0246 2048,
0247 RTEMS.TIMESLICE,
0248 RTEMS.GLOBAL,
0249 MPTEST.QUEUE_TASK_ID( 1 ),
0250 STATUS
0251 );
0252 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
0253
0254 TEXT_IO.PUT_LINE( "Starting Message Queue task (Global)" );
0255 RTEMS.TASKS.START(
0256 MPTEST.QUEUE_TASK_ID( 1 ),
0257 MPTEST.MESSAGE_QUEUE_TASK'ACCESS,
0258 1, -- index of buffer
0259 STATUS
0260 );
0261 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
0262
0263 TEXT_IO.PUT_LINE( "Creating Partition task (Global)" );
0264 RTEMS.TASKS.CREATE(
0265 MPTEST.PARTITION_TASK_NAME(
0266 TEST_SUPPORT.NODE
0267 ),
0268 2,
0269 2048,
0270 RTEMS.TIMESLICE,
0271 RTEMS.GLOBAL,
0272 MPTEST.PARTITION_TASK_ID( 1 ),
0273 STATUS
0274 );
0275 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
0276
0277 TEXT_IO.PUT_LINE( "Starting Partition task (Global)" );
0278 RTEMS.TASKS.START(
0279 MPTEST.PARTITION_TASK_ID( 1 ),
0280 MPTEST.PARTITION_TASK'ACCESS,
0281 0,
0282 STATUS
0283 );
0284 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
0285
0286 RTEMS.TASKS.SET_PRIORITY( RTEMS.SELF, 2, PREVIOUS_PRIORITY, STATUS );
0287 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
0288
0289 MPTEST.DELAYED_EVENTS_TASK( 1 );
0290
0291 end INIT;
0292
0293 --
0294 -- DELAYED_SEND_EVENT
0295 --
0296 -- DESCRIPTION:
0297 --
0298 -- This subprogram is a timer service routine which sends an
0299 -- event set to a waiting task.
0300 --
0301
0302 procedure DELAYED_SEND_EVENT (
0303 TIMER_ID : in RTEMS.ID;
0304 IGNORED_ADDRESS : in RTEMS.ADDRESS
0305 ) is
0306 STATUS : RTEMS.STATUS_CODES;
0307 begin
0308
0309 RTEMS.EVENT.SEND(
0310 MPTEST.TASK_ID( RTEMS.GET_INDEX( TIMER_ID ) ),
0311 RTEMS.EVENT_16,
0312 STATUS
0313 );
0314 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
0315
0316 end DELAYED_SEND_EVENT;
0317
0318 --
0319 -- TEST_TASK
0320 --
0321 -- DESCRIPTION:
0322 --
0323 -- This is one of the test tasks.
0324 --
0325
0326 procedure TEST_TASK (
0327 ARGUMENT : in RTEMS.TASKS.ARGUMENT
0328 ) is
0329 pragma Unreferenced(ARGUMENT);
0330 REMOTE_NODE : RTEMS.UNSIGNED32;
0331 REMOTE_TID : RTEMS.ID;
0332 EVENT_OUT : RTEMS.EVENT_SET;
0333 STATUS : RTEMS.STATUS_CODES;
0334 begin
0335
0336 if TEST_SUPPORT.NODE = 1 then
0337 REMOTE_NODE := 2;
0338 else
0339 REMOTE_NODE := 1;
0340 end if;
0341
0342 TEXT_IO.PUT_LINE( "About to go to sleep!" );
0343 RTEMS.TASKS.WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0344 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0345 TEXT_IO.PUT_LINE( "Waking up!" );
0346
0347 TEXT_IO.PUT( "Remote task's name is : " );
0348 TEST_SUPPORT.PUT_NAME( MPTEST.EVENT_TASK_NAME( REMOTE_NODE ), TRUE );
0349
0350 TEXT_IO.PUT_LINE( "Getting TID of remote task" );
0351
0352 loop
0353
0354 RTEMS.TASKS.IDENT(
0355 MPTEST.EVENT_TASK_NAME( REMOTE_NODE ),
0356 RTEMS.SEARCH_ALL_NODES,
0357 REMOTE_TID,
0358 STATUS
0359 );
0360
0361 exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
0362
0363 TEXT_IO.PUT_LINE( "task_ident" );
0364
0365 end loop;
0366
0367 if TEST_SUPPORT.NODE = 1 then
0368 TEXT_IO.PUT_LINE( "Sending events to remote task" );
0369
0370 loop
0371 exit when MPTEST.STOP_TEST;
0372
0373 for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
0374 loop
0375 RTEMS.EVENT.SEND(
0376 REMOTE_TID,
0377 RTEMS.EVENT_16,
0378 STATUS
0379 );
0380 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
0381
0382 exit when MPTEST.STOP_TEST;
0383
0384 end loop;
0385
0386 TEST_SUPPORT.PUT_DOT( "e" );
0387
0388 end loop;
0389
0390 end if;
0391
0392 TEXT_IO.PUT_LINE( "Receiving events from remote task" );
0393
0394 loop
0395 exit when MPTEST.STOP_TEST;
0396
0397 for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
0398 loop
0399 exit when MPTEST.STOP_TEST;
0400
0401 RTEMS.EVENT.RECEIVE(
0402 RTEMS.EVENT_16,
0403 RTEMS.DEFAULT_OPTIONS,
0404 RTEMS.NO_TIMEOUT,
0405 EVENT_OUT,
0406 STATUS
0407 );
0408 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
0409
0410 end loop;
0411
0412 TEST_SUPPORT.PUT_DOT( "e" );
0413
0414 end loop;
0415
0416 MPTEST.EXIT_TEST;
0417
0418 end TEST_TASK;
0419
0420 --
0421 -- DELAYED_EVENTS_TASK
0422 --
0423 -- DESCRIPTION:
0424 --
0425 -- This is one of the test tasks.
0426 --
0427
0428 procedure DELAYED_EVENTS_TASK (
0429 ARGUMENT : in RTEMS.TASKS.ARGUMENT
0430 ) is
0431 pragma Unreferenced(ARGUMENT);
0432 PREVIOUS_MODE : RTEMS.MODE;
0433 EVENTS_OUT : RTEMS.EVENT_SET;
0434 STATUS : RTEMS.STATUS_CODES;
0435 begin
0436
0437 RTEMS.TASKS.MODE(
0438 RTEMS.PREEMPT + RTEMS.TIMESLICE,
0439 RTEMS.PREEMPT_MASK + RTEMS.TIMESLICE_MASK,
0440 PREVIOUS_MODE,
0441 STATUS
0442 );
0443 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0444
0445 RTEMS.TIMER.CREATE(
0446 MPTEST.TIMER_NAME( 1 ),
0447 MPTEST.TIMER_ID( 1 ),
0448 STATUS
0449 );
0450 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
0451
0452 RTEMS.TASKS.IDENT(
0453 RTEMS.SELF,
0454 RTEMS.SEARCH_ALL_NODES,
0455 MPTEST.TASK_ID( RTEMS.GET_INDEX( MPTEST.TIMER_ID( 1 ) ) ),
0456 STATUS
0457 );
0458 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENTS" );
0459
0460 loop
0461
0462 for COUNT in 1 .. MPTEST.DELAYED_EVENT_DOT_COUNT
0463 loop
0464 RTEMS.TIMER.FIRE_AFTER(
0465 MPTEST.TIMER_ID( 1 ),
0466 1,
0467 MPTEST.DELAYED_SEND_EVENT'ACCESS,
0468 RTEMS.NULL_ADDRESS,
0469 STATUS
0470 );
0471 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
0472
0473 RTEMS.EVENT.RECEIVE(
0474 RTEMS.EVENT_16,
0475 RTEMS.DEFAULT_OPTIONS,
0476 RTEMS.NO_TIMEOUT,
0477 EVENTS_OUT,
0478 STATUS
0479 );
0480 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
0481
0482 end loop;
0483
0484 TEST_SUPPORT.PUT_DOT( "." );
0485
0486 end loop;
0487
0488 end DELAYED_EVENTS_TASK;
0489
0490 --
0491 -- MESSAGE_QUEUE_TASK
0492 --
0493 -- DESCRIPTION:
0494 --
0495 -- This is one of the test tasks.
0496 --
0497
0498 procedure MESSAGE_QUEUE_TASK (
0499 INDEX : in RTEMS.TASKS.ARGUMENT
0500 ) is
0501 YIELD_COUNT : RTEMS.UNSIGNED32;
0502 OVERFLOW_COUNT : RTEMS.UNSIGNED32_POINTER;
0503 BUFFER_COUNT : RTEMS.UNSIGNED32_POINTER;
0504 STATUS : RTEMS.STATUS_CODES;
0505 MESSAGE_SIZE : RTEMS.SIZE := 0;
0506 begin
0507
0508 MPTEST.BUFFER_AREAS( INDEX ).FIELD1 := 0;
0509 MPTEST.BUFFER_AREAS( INDEX ).FIELD2 := 0;
0510 MPTEST.BUFFER_AREAS( INDEX ).FIELD3 := 0;
0511 MPTEST.BUFFER_AREAS( INDEX ).FIELD4 := 0;
0512
0513 TEXT_IO.PUT_LINE( "Getting ID of message queue" );
0514
0515 loop
0516
0517 RTEMS.MESSAGE_QUEUE.IDENT(
0518 MPTEST.QUEUE_NAME( 1 ),
0519 RTEMS.SEARCH_ALL_NODES,
0520 MPTEST.QUEUE_ID( 1 ),
0521 STATUS
0522 );
0523 exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
0524
0525 TEXT_IO.PUT_LINE( "message_queue_ident FAILED!!" );
0526
0527 end loop;
0528
0529 if TEST_SUPPORT.NODE = 1 then
0530
0531 RTEMS.MESSAGE_QUEUE.SEND(
0532 MPTEST.QUEUE_ID( 1 ),
0533 MPTEST.BUFFERS( INDEX ),
0534 4,
0535 STATUS
0536 );
0537 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
0538
0539 OVERFLOW_COUNT := MPTEST.BUFFER_AREAS( INDEX ).FIELD1'ACCESS;
0540
0541 BUFFER_COUNT := MPTEST.BUFFER_AREAS( INDEX ).FIELD2'ACCESS;
0542
0543 else
0544
0545 OVERFLOW_COUNT := MPTEST.BUFFER_AREAS( INDEX ).FIELD3'ACCESS;
0546
0547 BUFFER_COUNT := MPTEST.BUFFER_AREAS( INDEX ).FIELD4'ACCESS;
0548
0549 end if;
0550
0551 loop
0552
0553 exit when MPTEST.STOP_TEST;
0554
0555 YIELD_COUNT := 100;
0556
0557 for COUNT in 1 .. MPTEST.MESSAGE_DOT_COUNT
0558 loop
0559
0560 exit when MPTEST.STOP_TEST;
0561
0562 RTEMS.MESSAGE_QUEUE.RECEIVE(
0563 MPTEST.QUEUE_ID( 1 ),
0564 MPTEST.BUFFERS( INDEX ),
0565 RTEMS.DEFAULT_OPTIONS,
0566 RTEMS.NO_TIMEOUT,
0567 MESSAGE_SIZE,
0568 STATUS
0569 );
0570 TEST_SUPPORT.DIRECTIVE_FAILED(
0571 STATUS,
0572 "MESSAGE_QUEUE_RECEIVE"
0573 );
0574
0575 if BUFFER_COUNT.ALL = RTEMS.UNSIGNED32'LAST then
0576 BUFFER_COUNT.ALL := 0;
0577 OVERFLOW_COUNT.ALL := OVERFLOW_COUNT.ALL + 1;
0578 else
0579 BUFFER_COUNT.ALL := BUFFER_COUNT.ALL + 1;
0580 end if;
0581
0582 RTEMS.MESSAGE_QUEUE.SEND(
0583 MPTEST.QUEUE_ID( 1 ),
0584 MPTEST.BUFFERS( INDEX ),
0585 4,
0586 STATUS
0587 );
0588 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
0589
0590 if MPTEST.STOP_TEST = FALSE then
0591 if TEST_SUPPORT.NODE = 1 then
0592
0593 YIELD_COUNT := YIELD_COUNT - 1;
0594
0595 if YIELD_COUNT = 0 then
0596
0597 RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
0598 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
0599
0600 YIELD_COUNT := 100;
0601
0602 end if;
0603
0604 end if;
0605
0606 end if;
0607
0608 end loop;
0609
0610 TEST_SUPPORT.PUT_DOT( "m" );
0611
0612 end loop;
0613
0614 MPTEST.EXIT_TEST;
0615
0616 end MESSAGE_QUEUE_TASK;
0617
0618 --
0619 -- PARTITION_TASK
0620 --
0621 -- DESCRIPTION:
0622 --
0623 -- This is one of the test tasks.
0624 --
0625
0626 procedure PARTITION_TASK (
0627 IGNORED : in RTEMS.TASKS.ARGUMENT
0628 ) is
0629 BUFFER : RTEMS.ADDRESS;
0630 STATUS : RTEMS.STATUS_CODES;
0631 begin
0632
0633 TEXT_IO.PUT_LINE( "Getting ID of partition" );
0634
0635 loop
0636
0637 RTEMS.PARTITION.IDENT(
0638 MPTEST.PARTITION_NAME( 1 ),
0639 RTEMS.SEARCH_ALL_NODES,
0640 MPTEST.PARTITION_ID( 1 ),
0641 STATUS
0642 );
0643 exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
0644
0645 TEXT_IO.PUT_LINE( "partition_ident FAILED!!" );
0646
0647 end loop;
0648
0649 loop
0650
0651 exit when MPTEST.STOP_TEST;
0652
0653 for COUNT in 1 .. MPTEST.PARTITION_DOT_COUNT
0654 loop
0655
0656 exit when MPTEST.STOP_TEST;
0657
0658 RTEMS.PARTITION.GET_BUFFER(
0659 MPTEST.PARTITION_ID( 1 ),
0660 BUFFER,
0661 STATUS
0662 );
0663 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
0664
0665 RTEMS.PARTITION.RETURN_BUFFER(
0666 MPTEST.PARTITION_ID( 1 ),
0667 BUFFER,
0668 STATUS
0669 );
0670 TEST_SUPPORT.DIRECTIVE_FAILED(
0671 STATUS,
0672 "PARTITION_RETURN_BUFFER"
0673 );
0674
0675 if TEST_SUPPORT.NODE = 1 then
0676
0677 RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
0678 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
0679
0680 end if;
0681
0682 end loop;
0683
0684 TEST_SUPPORT.PUT_DOT( "p" );
0685
0686 end loop;
0687
0688 MPTEST.EXIT_TEST;
0689
0690 end PARTITION_TASK;
0691
0692 --
0693 -- SEMAPHORE_TASK
0694 --
0695 -- DESCRIPTION:
0696 --
0697 -- This is one of the test tasks.
0698 --
0699
0700 procedure SEMAPHORE_TASK (
0701 ARGUMENT : in RTEMS.TASKS.ARGUMENT
0702 ) is
0703 pragma Unreferenced(ARGUMENT);
0704 YIELD_COUNT : RTEMS.UNSIGNED32;
0705 STATUS : RTEMS.STATUS_CODES;
0706 begin
0707
0708 TEXT_IO.PUT_LINE( "Getting ID of semaphore" );
0709
0710 loop
0711
0712 RTEMS.SEMAPHORE.IDENT(
0713 MPTEST.SEMAPHORE_NAME( 1 ),
0714 RTEMS.SEARCH_ALL_NODES,
0715 MPTEST.SEMAPHORE_ID( 1 ),
0716 STATUS
0717 );
0718 exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
0719
0720 TEXT_IO.PUT_LINE( "semaphore_ident FAILED!!" );
0721
0722 end loop;
0723
0724 loop
0725
0726 YIELD_COUNT := 100;
0727
0728 exit when MPTEST.STOP_TEST;
0729
0730 for COUNT in 1 .. MPTEST.SEMAPHORE_DOT_COUNT
0731 loop
0732
0733 exit when MPTEST.STOP_TEST;
0734
0735 RTEMS.SEMAPHORE.OBTAIN(
0736 MPTEST.SEMAPHORE_ID( 1 ),
0737 RTEMS.DEFAULT_OPTIONS,
0738 RTEMS.NO_TIMEOUT,
0739 STATUS
0740 );
0741 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
0742
0743 RTEMS.SEMAPHORE.RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
0744 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
0745
0746 if TEST_SUPPORT.NODE = 1 then
0747
0748 YIELD_COUNT := YIELD_COUNT - 1;
0749
0750 if YIELD_COUNT = 0 then
0751
0752 RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
0753 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
0754
0755 YIELD_COUNT := 100;
0756
0757 end if;
0758
0759 end if;
0760
0761 end loop;
0762
0763 TEST_SUPPORT.PUT_DOT( "s" );
0764
0765 end loop;
0766
0767 MPTEST.EXIT_TEST;
0768
0769 end SEMAPHORE_TASK;
0770
0771 end MPTEST;