8c3175add621ac161399e3a2103494aedeae5496
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 * ======== InterruptHost.xs ========
34 *
35 */
37 var Hwi = null;
38 var MultiProc = null;
39 var Ipc = null;
41 /*
42 * ======== module$use ========
43 */
44 function module$use()
45 {
46 Hwi = xdc.useModule("ti.sysbios.family.arm.a8.intcps.Hwi");
47 MultiProc = xdc.useModule("ti.sdo.utils.MultiProc");
48 Ipc = xdc.useModule("ti.sdo.ipc.Ipc");
50 this.dspProcId = MultiProc.getIdMeta("DSP");
51 this.videoProcId = MultiProc.getIdMeta("VIDEO-M3");
52 this.vpssProcId = MultiProc.getIdMeta("VPSS-M3");
53 this.hostProcId = MultiProc.getIdMeta("HOST");
54 }
56 function module$static$init(mod, params)
57 {
58 /* DSP to HOST */
59 mod.fxnTable[0].func = null;
60 mod.fxnTable[0].arg = 0;
62 /* VIDEO-M3 to HOST */
63 mod.fxnTable[1].func = null;
64 mod.fxnTable[1].arg = 0;
66 /* VPSS-M3 to HOST */
67 mod.fxnTable[2].func = null;
68 mod.fxnTable[2].arg = 0;
70 mod.numPlugged = 0;
71 }
73 /*
74 * ======== viewInitInterrupt ========
75 */
76 function viewInitInterrupt(view)
77 {
78 var InterruptHostModStr = "ti.sdo.ipc.family.ti81xx.InterruptHost";
79 var Program = xdc.useModule('xdc.rov.Program');
80 var InterruptHost = xdc.useModule(InterruptHostModStr);
81 var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
82 var MultiProcCfg = Program.getModuleConfig('ti.sdo.utils.MultiProc');
83 var InterruptHostCfg = Program.getModuleConfig(InterruptHostModStr);
84 var ScalarStructs = xdc.useModule('xdc.rov.support.ScalarStructs');
85 var mod = Program.scanRawView(InterruptHostModStr).modState;
87 var remoteProcIds = [
88 /*
89 * [remoteProcId,
90 * fxnTable index,
91 * MBX# (from remote),
92 * MBX# (to remote)]
93 */
94 [InterruptHostCfg.dspProcId, 0, 0, 3],
95 [InterruptHostCfg.videoProcId, 1, 6, 4],
96 [InterruptHostCfg.vpssProcId, 2, 8, 5]
97 ];
99 var MAILBOX_IRQSTATUS_CLR_HOST = (InterruptHostCfg.mailboxBaseAddr + 0x104);
100 var MAILBOX_IRQENABLE_SET_HOST = (InterruptHostCfg.mailboxBaseAddr + 0x108);
101 var MAILBOX_IRQENABLE_CLR_HOST = (InterruptHostCfg.mailboxBaseAddr + 0x10C);
103 function MAILBOX_MESSAGE(M) {
104 return (InterruptHostCfg.mailboxBaseAddr + 0x040 + (0x4 * M));
105 }
107 function MAILBOX_STATUS(M) {
108 return (InterruptHostCfg.mailboxBaseAddr + 0x0C0 + (0x4 * M));
109 }
111 function MAILBOX_REG_VAL(M) {
112 return (0x1 << (2 * M));
113 }
115 for each (procId in remoteProcIds) {
116 if (procId[0] != MultiProc.INVALIDID) {
117 var entryView = Program.newViewStruct(InterruptHostModStr,
118 'IncomingInterrupts');
119 entryView.remoteProcName = MultiProc.getName$view(procId[0]) + " ("
120 + procId[0] + ")";
121 entryView.registered = (Number(mod.fxnTable[procId[1]].func) != 0);
122 print(entryView.remoteProcName + ": " + mod.fxnTable[procId[1]].func);
124 var enabled = Program.fetchStruct(
125 ScalarStructs.S_Bits32$fetchDesc,
126 $addr(MAILBOX_IRQENABLE_SET_HOST), false).elem;
127 entryView.enabled = ((enabled & MAILBOX_REG_VAL(procId[2])) != 0);
129 var intPending = Program.fetchStruct(
130 ScalarStructs.S_Bits32$fetchDesc,
131 $addr(MAILBOX_STATUS(procId[2])), false).elem;
132 entryView.intPending = (intPending != 0);
134 entryView.payload = $addr(Program.fetchStruct(
135 ScalarStructs.S_Bits32$fetchDesc,
136 $addr(MAILBOX_MESSAGE(procId[2])), false).elem);
138 view.elements.$add(entryView);
139 }
140 }
141 }