1    /*
     2     * Copyright (c) 2012-2013, Texas Instruments Incorporated
     3     * All rights reserved.
     4     *
     5     * Redistribution and use in source and binary forms, with or without
     6     * modification, are permitted provided that the following conditions
     7     * are met:
     8     *
     9     * *  Redistributions of source code must retain the above copyright
    10     *    notice, this list of conditions and the following disclaimer.
    11     *
    12     * *  Redistributions in binary form must reproduce the above copyright
    13     *    notice, this list of conditions and the following disclaimer in the
    14     *    documentation and/or other materials provided with the distribution.
    15     *
    16     * *  Neither the name of Texas Instruments Incorporated nor the names of
    17     *    its contributors may be used to endorse or promote products derived
    18     *    from this software without specific prior written permission.
    19     *
    20     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    21     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    22     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    23     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    24     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    25     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    26     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    27     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    28     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    29     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    30     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    31     */
    32    /*
    33     *  ======== NameServerRemoteRpmsg.xdc ========
    34     */
    35    
    36    import xdc.runtime.Assert;
    37    
    38    import ti.sysbios.knl.Semaphore;
    39    import ti.sysbios.gates.GateMutex;
    40    import ti.sdo.utils.INameServerRemote;
    41    
    42    /*
    43     *  Used by NameServer to communicate to remote processors.
    44     *
    45     *  This module is used by {@link ti.sdo.utils.NameServer} to communicate
    46     *  to remote processors using {@link ti.sdo.ipc.MessageQ}.
    47     *  There needs to be one instance between each two cores in the system.
    48     *  Interrupts must be enabled before using this module.
    49     *
    50     *  This NameServerRemote is tied to the TransportRpmsg transport, mainly
    51     *  used beteen a Linux host and a BIOS core acting as slave.
    52     */
    53    
    54    @InstanceFinalize
    55    
    56    module NameServerRemoteRpmsg inherits ti.sdo.utils.INameServerRemote
    57    {
    58    
    59        /*!
    60         *  ======== timeoutInMicroSecs ========
    61         *  The timeout value in terms of microseconds
    62         *
    63         *  A NameServer request will return after this amout of time
    64         *  without a response. The default timeout value is 1 s.
    65         *  To not wait, use the value of '0'.  To wait forever, use '~(0)'.
    66         */
    67        config UInt timeoutInMicroSecs = 1000000;
    68    
    69        /*!
    70         *  Assert raised if too many characters in the name
    71         */
    72        config Assert.Id A_nameIsTooLong = {
    73            msg: "Too many characters in name"
    74        };
    75    
    76    internal:
    77    
    78        /*
    79         *  ======== timeout ========
    80         *  The timeout value to pass into Semaphore_pend
    81         *
    82         *  This value is calculated based on timeoutInMicroSecs and the
    83         *  SYSBIOS clock.tickPeriod.
    84         */
    85        config UInt timeout;
    86    
    87        /*!
    88         *  ======== Type ========
    89         *  The type of the message
    90         */
    91        enum Type {
    92            REQUEST =  0,
    93            RESPONSE = 1
    94        };
    95    
    96        struct Instance_State {
    97            UInt16              remoteProcId; /* remote MultiProc id            */
    98        };
    99    
   100        /* Module state */
   101        struct Module_State {
   102            Semaphore.Handle    semRemoteWait;  /* sem to wait on remote proc    */
   103            GateMutex.Handle    gateMutex;      /* gate to protect critical code */
   104            Ptr                 nsMsg;          /* pointer to NameServer msg     */
   105            Int                 nsPort;         /* Name Server port rpmsg addr   */
   106        };
   107    }