SDOCM00103935:Update to work with different cluster base id
[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 MultiProcCfg = Program.getModuleConfig('ti.sdo.utils.MultiProc');
107     var modCfg =
108         Program.getModuleConfig('ti.sdo.ipc.family.f28m35x.NotifyDriverCirc');
110     /* view.remoteProcName */
111     try {
112         view.remoteProcName = MultiProc.getName$view(obj.remoteProcId -
113                                   MultiProcCfg.baseIdOfCluster);
114     }
115     catch(e) {
116         Program.displayError(view, 'remoteProcName',
117                              "Problem retrieving proc name: " + e);
118     }
120     /* view obj information */
121     view.bufSize      = modCfg.numMsgs;
122     view.spinCount    = obj.spinCount;
123     view.maxSpinWait  = obj.spinWaitTime;;
126 /*
127  *  ======== getEventData ========
128  *  Helper function for use within viewInitData
129  */
130 function getEventData(view, obj, bufferPtr, putIndex, getIndex)
132     var NotifyDriverCirc =
133         xdc.useModule('ti.sdo.ipc.family.f28m35x.NotifyDriverCirc');
134     var modCfg =
135         Program.getModuleConfig('ti.sdo.ipc.family.f28m35x.NotifyDriverCirc');
137     if (bufferPtr == obj.putBuffer) {
138         var bufferName = "put";
139     }
140     else {
141         var bufferName = "get";
142     }
144     try {
145         var putBuffer = Program.fetchArray(obj.putBuffer$fetchDesc,
146                                            bufferPtr,
147                                            modCfg.numMsgs);
148     }
149     catch(e) {
150         throw (new Error("Error fetching putBuffer struct from shared memory"));
151     }
153     var i = getIndex;
155     while (i != putIndex) {
156         /* The event is registered */
157         var elem = Program.newViewStruct(
158                 'ti.sdo.ipc.family.f28m35x.NotifyDriverCirc',
159                 'Events');
161         elem.index = i;
162         elem.buffer = bufferName;
163         elem.addr = utils.toHex(putBuffer[i].$addr);
164         elem.eventId = putBuffer[i].eventid;
165         elem.payload = utils.toHex(putBuffer[i].payload);
167         /* Create a new row in the instance data view */
168         view.elements.$add(elem);
170         i++;
171         if ((i % modCfg.numMsgs) == 0) {
172             i = 0;
173         }
174     }
178 /*
179  *  ======== viewInitData ========
180  *  Instance data view.
181  */
182 function viewInitData(view, obj)
184     var Program         = xdc.useModule('xdc.rov.Program');
185     var ScalarStructs   = xdc.useModule('xdc.rov.support.ScalarStructs');
186     var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
188     try {
189         var notifyObj = Program.scanHandleView('ti.sdo.ipc.Notify',
190             obj.notifyHandle, 'Basic');
191     }
192     catch (e) {
193         throw (new Error("Error fetching Notify instance view"));
194     }
196     /* Display the instance label in the tree */
197     view.label = "remoteProcId = " + obj.remoteProcId + " lineId = " +
198         notifyObj.lineId;
200     /* Fetch put/get index's */
201     try {
202         var putWriteIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
203                                                 obj.putWriteIndex);
204     }
205     catch(e) {
206         throw (new Error("Error fetching putWriteIndex " +
207                          "struct from shared memory"));
208     }
210     try {
211         var putReadIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
212                                                obj.putReadIndex);
213     }
214     catch(e) {
215         throw (new Error("Error fetching putReadIndex " +
216                          "struct from shared memory"));
217     }
219     try {
220         var getWriteIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
221                                                 obj.getWriteIndex);
222     }
223     catch(e) {
224         throw (new Error("Error fetching getWriteIndex " +
225                          "struct from shared memory"));
226     }
228     try {
229         var getReadIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
230                                                obj.getReadIndex);
231     }
232     catch(e) {
233         throw (new Error("Error fetching getReadIndex " +
234                          "struct from shared memory"));
235     }
237     /* Get event data for the put buffer */
238     getEventData(view, obj, obj.putBuffer, putWriteIndex.elem,
239                  putReadIndex.elem);
241     /* Get event data for the get buffer */
242     getEventData(view, obj, obj.getBuffer, getWriteIndex.elem,
243                  getReadIndex.elem);