61cf07d2a21374b44aaa27be5a8b135c5e69298b
[ipc/ipcdev.git] / packages / ti / sdo / ipc / family / f28m35x / NotifyDriverCirc.xs
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  *  ======== NotifyDriverCirc.xs ================
34  */
36 var NotifyDriverCirc = null;
37 var IpcMgr           = null;
38 var MultiProc        = null;
39 var Notify           = null;
40 var Hwi              = null;
42 var MTOCIPC = [ 112, 113, 114, 115 ];
43 var CTOMIPC = [ 96, 97, 98, 99 ];
45 /*
46  *  ======== module$use ========
47  */
48 function module$use()
49 {
50     NotifyDriverCirc = this;
51     IpcMgr           = xdc.useModule("ti.sdo.ipc.family.f28m35x.IpcMgr");
52     MultiProc        = xdc.useModule("ti.sdo.utils.MultiProc");
53     Notify           = xdc.useModule("ti.sdo.ipc.Notify");
54     Hwi              = xdc.useModule("ti.sysbios.hal.Hwi");
55 }
57 /*
58  *  ======== module$static$init ========
59  */
60 function module$static$init(mod, params)
61 {
62     NotifyDriverCirc.maxIndex = NotifyDriverCirc.numMsgs - 1;
63     NotifyDriverCirc.modIndex = NotifyDriverCirc.numMsgs / 4;
65     /* determine the local and remote interrupt id */
66     if (Program.build.target.name.match(/C28.*/)) {
67         NotifyDriverCirc.localIntId = MTOCIPC[IpcMgr.ipcSetFlag];
68         NotifyDriverCirc.remoteIntId = CTOMIPC[IpcMgr.ipcSetFlag];
69     }
70     else {
71         NotifyDriverCirc.localIntId = CTOMIPC[IpcMgr.ipcSetFlag];
72         NotifyDriverCirc.remoteIntId = MTOCIPC[IpcMgr.ipcSetFlag];
73     }
74 }
76 /*
77  *  ======== sharedMemReqMeta ========
78  */
79 function sharedMemReqMeta(params)
80 {
81     /*
82      *  Amount of shared memory:
83      *  1 putBuffer with numMsgs +
84      *  1 putWriteIndex ptr      +
85      *  1 putReadIndex ptr
86      */
87     memReq =
88         (NotifyDriverCirc.EventEntry.$sizeof() * NotifyDriverCirc.numMsgs) +
89         (2 * Program.build.target.stdTypes['t_Int32'].size);
91     return (memReq);
92 }
94 /*
95  *************************************************************************
96  *                       ROV View functions
97  *************************************************************************
98  */
100 /*
101  *  ======== viewInitBasic ========
102  */
103 function viewInitBasic(view, obj)
105     var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
106     var modCfg =
107         Program.getModuleConfig('ti.sdo.ipc.family.f28m35x.NotifyDriverCirc');
109     /* view.remoteProcName */
110     try {
111         view.remoteProcName = MultiProc.getName$view(obj.remoteProcId);
112     }
113     catch(e) {
114         Program.displayError(view, 'remoteProcName',
115                              "Problem retrieving proc name: " + e);
116     }
118     /* view obj information */
119     view.bufSize      = modCfg.numMsgs;
120     view.spinCount    = obj.spinCount;
121     view.maxSpinWait  = obj.spinWaitTime;;
124 /*
125  *  ======== getEventData ========
126  *  Helper function for use within viewInitData
127  */
128 function getEventData(view, obj, bufferPtr, putIndex, getIndex)
130     var NotifyDriverCirc =
131         xdc.useModule('ti.sdo.ipc.family.f28m35x.NotifyDriverCirc');
132     var modCfg =
133         Program.getModuleConfig('ti.sdo.ipc.family.f28m35x.NotifyDriverCirc');
135     if (bufferPtr == obj.putBuffer) {
136         var bufferName = "put";
137     }
138     else {
139         var bufferName = "get";
140     }
142     try {
143         var putBuffer = Program.fetchArray(obj.putBuffer$fetchDesc,
144                                            bufferPtr,
145                                            modCfg.numMsgs);
146     }
147     catch(e) {
148         throw (new Error("Error fetching putBuffer struct from shared memory"));
149     }
151     var i = getIndex;
153     while (i != putIndex) {
154         /* The event is registered */
155         var elem = Program.newViewStruct(
156                 'ti.sdo.ipc.family.f28m35x.NotifyDriverCirc',
157                 'Events');
159         elem.index = i;
160         elem.buffer = bufferName;
161         elem.addr = utils.toHex(putBuffer[i].$addr);
162         elem.eventId = putBuffer[i].eventid;
163         elem.payload = utils.toHex(putBuffer[i].payload);
165         /* Create a new row in the instance data view */
166         view.elements.$add(elem);
168         i++;
169     }
173 /*
174  *  ======== viewInitData ========
175  *  Instance data view.
176  */
177 function viewInitData(view, obj)
179     var Program         = xdc.useModule('xdc.rov.Program');
180     var ScalarStructs   = xdc.useModule('xdc.rov.support.ScalarStructs');
181     var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
183     try {
184         var notifyObj = Program.scanHandleView('ti.sdo.ipc.Notify',
185             obj.notifyHandle, 'Basic');
186     }
187     catch (e) {
188         throw (new Error("Error fetching Notify instance view"));
189     }
191     /* Display the instance label in the tree */
192     view.label = "remoteProcId = " + obj.remoteProcId + " lineId = " +
193         notifyObj.lineId;
195     /* Fetch put/get index's */
196     try {
197         var putWriteIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
198                                                 obj.putWriteIndex);
199     }
200     catch(e) {
201         throw (new Error("Error fetching putWriteIndex " +
202                          "struct from shared memory"));
203     }
205     try {
206         var putReadIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
207                                                obj.putReadIndex);
208     }
209     catch(e) {
210         throw (new Error("Error fetching putReadIndex " +
211                          "struct from shared memory"));
212     }
214     try {
215         var getWriteIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
216                                                 obj.getWriteIndex);
217     }
218     catch(e) {
219         throw (new Error("Error fetching getWriteIndex " +
220                          "struct from shared memory"));
221     }
223     try {
224         var getReadIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
225                                                obj.getReadIndex);
226     }
227     catch(e) {
228         throw (new Error("Error fetching getReadIndex " +
229                          "struct from shared memory"));
230     }
232     /* Get event data for the put buffer */
233     getEventData(view, obj, obj.putBuffer, putWriteIndex.elem,
234                  putReadIndex.elem);
236     /* Get event data for the get buffer */
237     getEventData(view, obj, obj.getBuffer, getWriteIndex.elem,
238                  getReadIndex.elem);