61cf07d2a21374b44aaa27be5a8b135c5e69298b
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)
104 {
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;;
122 }
124 /*
125 * ======== getEventData ========
126 * Helper function for use within viewInitData
127 */
128 function getEventData(view, obj, bufferPtr, putIndex, getIndex)
129 {
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 }
170 }
173 /*
174 * ======== viewInitData ========
175 * Instance data view.
176 */
177 function viewInitData(view, obj)
178 {
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);
240 }