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 }