Back to home page

LXR

 
 

    


Warning, /testsuites/ada/mptests/mp01/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 1 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.CLOCK;
0042 with TEST_SUPPORT;
0043 with TEXT_IO;
0044 with UNSIGNED32_IO;
0045 
0046 package body MPTEST is
0047 
0048 --
0049 --  INIT
0050 --
0051 
0052    procedure INIT (
0053       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0054    ) is
0055       pragma Unreferenced(ARGUMENT);
0056       C      : CHARACTER;
0057       TIME   : RTEMS.TIME_OF_DAY;
0058       STATUS : RTEMS.STATUS_CODES;
0059    begin
0060 
0061       TEXT_IO.NEW_LINE( 2 );
0062       TEST_SUPPORT.ADA_TEST_BEGIN;
0063       TEXT_IO.PUT( "*** NODE " );
0064       UNSIGNED32_IO.PUT(
0065          TEST_SUPPORT.NODE,
0066          WIDTH => 1
0067       );
0068       TEXT_IO.PUT_LINE( " ***" );
0069      
0070       if TEST_SUPPORT.NODE /= 1 then
0071          C := 'S';
0072       else
0073          C := 'M';
0074       end if;
0075 
0076       MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  C, 'A', '1', ' ' );
0077       MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  C, 'A', '2', ' ' );
0078       MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  C, 'A', '3', ' ' );
0079 
0080       TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
0081 
0082       RTEMS.CLOCK.SET( TIME, STATUS );
0083       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
0084 
0085       TEXT_IO.PUT_LINE( "Creating task 1 (Global)" );
0086 
0087       RTEMS.TASKS.CREATE( 
0088          MPTEST.TASK_NAME( 1 ), 
0089          1, 
0090          2048, 
0091          RTEMS.DEFAULT_MODES,
0092          RTEMS.GLOBAL,
0093          MPTEST.TASK_ID( 1 ),
0094          STATUS
0095       );
0096       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
0097 
0098       TEXT_IO.PUT_LINE( "Creating task 2 (Global)" );
0099 
0100       RTEMS.TASKS.CREATE( 
0101          MPTEST.TASK_NAME( 2 ), 
0102          1, 
0103          2048, 
0104          RTEMS.TIMESLICE,
0105          RTEMS.GLOBAL,
0106          MPTEST.TASK_ID( 2 ),
0107          STATUS
0108       );
0109       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
0110 
0111       TEXT_IO.PUT_LINE( "Creating task 3 (Local)" );
0112 
0113       RTEMS.TASKS.CREATE( 
0114          MPTEST.TASK_NAME( 3 ), 
0115          1, 
0116          2048, 
0117          RTEMS.DEFAULT_MODES,
0118          RTEMS.DEFAULT_ATTRIBUTES,
0119          MPTEST.TASK_ID( 3 ),
0120          STATUS
0121       );
0122       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
0123 
0124       RTEMS.TASKS.START(
0125          MPTEST.TASK_ID( 1 ),
0126          MPTEST.TEST_TASK'ACCESS,
0127          0,
0128          STATUS
0129       );
0130       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
0131 
0132       RTEMS.TASKS.START(
0133          MPTEST.TASK_ID( 2 ),
0134          MPTEST.TEST_TASK'ACCESS,
0135          0,
0136          STATUS
0137       );
0138       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
0139 
0140       RTEMS.TASKS.START(
0141          MPTEST.TASK_ID( 3 ),
0142          MPTEST.TEST_TASK'ACCESS,
0143          0,
0144          STATUS
0145       );
0146       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
0147 
0148       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0149       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0150 
0151    end INIT;
0152 
0153 --
0154 --  TEST_TASK
0155 --
0156 
0157    procedure TEST_TASK (
0158       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0159    ) is
0160       pragma Unreferenced(ARGUMENT);
0161       TIME   : RTEMS.TIME_OF_DAY;
0162       TID    : RTEMS.ID;
0163       STATUS : RTEMS.STATUS_CODES;
0164    begin
0165 
0166       RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
0167       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
0168    
0169       RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0170       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0171 
0172       TEST_SUPPORT.PUT_NAME( 
0173          MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0174          FALSE
0175       );
0176 
0177       TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
0178       TEXT_IO.NEW_LINE;
0179 
0180       RTEMS.TASKS.WAKE_AFTER( 
0181          TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * 
0182            TEST_SUPPORT.TICKS_PER_SECOND, 
0183          STATUS
0184       );
0185       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0186           
0187       RTEMS.CLOCK.GET_TOD( TIME, STATUS );
0188       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
0189 
0190       TEST_SUPPORT.PUT_NAME( 
0191          MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0192          FALSE
0193       );
0194 
0195       TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
0196       TEXT_IO.NEW_LINE;
0197 
0198       if TEST_SUPPORT.TASK_NUMBER( TID ) = 1 then         -- TASK 1
0199 
0200          TEST_SUPPORT.PUT_NAME( 
0201             MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
0202             FALSE
0203          );
0204 
0205          TEXT_IO.PUT_LINE( " - deleting self" );
0206 
0207          RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0208          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0209 
0210       else if TEST_SUPPORT.TASK_NUMBER( TID ) = 2 then    -- TASK 2
0211 
0212          TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), FALSE );
0213          TEXT_IO.PUT( " - waiting to be deleted by " );
0214          TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), TRUE );
0215 
0216          loop
0217             TEST_SUPPORT.DO_NOTHING;   -- can't be optimized away
0218          end loop;
0219 
0220       else                                                -- TASK 3
0221 
0222          TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
0223          TEXT_IO.PUT( " - getting TID of " );
0224          TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
0225          
0226          RTEMS.TASKS.IDENT( 
0227             MPTEST.TASK_NAME( 2 ),
0228             RTEMS.SEARCH_ALL_NODES,
0229             TID,
0230             STATUS
0231          );
0232          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
0233 
0234          TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
0235          TEXT_IO.PUT( " - deleting " );
0236          TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
0237 
0238          RTEMS.TASKS.DELETE( TID, STATUS );
0239          TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
0240 
0241       end if;
0242       end if;
0243 
0244       TEST_SUPPORT.ADA_TEST_END;
0245 
0246       RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0247 
0248    end TEST_TASK;
0249 
0250 end MPTEST;