Move Interrupt and NotifyCircSetup modules into tci663x
[ipc/ipcdev.git] / packages / ti / sdo / ipc / family / tci663x / Interrupt.xdc
1 /*
2  * Copyright (c) 2014-2015 Texas Instruments Incorporated - http://www.ti.com
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  *   Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  *
11  *   Redistributions in binary form must reproduce the above copyright
12  *   notice, this list of conditions and the following disclaimer in the
13  *   documentation and/or other materials provided with the
14  *   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
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /*
34  *  ======== Interrupt.xdc ========
35  */
36 package ti.sdo.ipc.family.tci663x;
38 import xdc.rov.ViewInfo;
39 import xdc.runtime.Assert;
40 import ti.sysbios.hal.Hwi;
42 /*!
43  *  ======== Interrupt ========
44  *  TCI663x based interrupt manager
45  */
46 @ModuleStartup
48 module Interrupt inherits ti.sdo.ipc.notifyDrivers.IInterrupt
49 {
51     /*! Return value from Interrupt_intClear() when procId != HOST
52      *
53      *  When acknowledging an interrupt from the host, the IPCGR register
54      *  value is returned as the payload. For all other processors,
55      *  Interrupt_INVALIDPAYLOAD is returned.
56      */
57     const UInt INVALIDPAYLOAD = 0xFFFFFFFF;
59     /*!
60      *  ======== enableKick ========
61      *  If set to 'true' IPC will unlock the KICK registers on C66x devices
62      *
63      *  IPC unlocks the KICK registers on the local core if the local
64      *  core is CORE0.
65      */
66     config Bool enableKick = true;
68     /*! cpu interrupt number for IPC */
69     config UInt ipcIntr = 5;
71     /*! Host processor must be first in MultiProc name list
72      *
73      *  If the host processor is present in the MultiProc name list,
74      *  it must be listed as the first member. The internal implementation
75      *  depends on this ordering.
76      */
77     config Assert.Id A_hostConfig  = {
78         msg: "A_hostConfig: HOST must be first in MultiProc name list"
79     };
81     /*! The cluster base ID has not been set
82      *
83      *  The cluster base ID must be set either by the configuration script
84      *  or during the startup phase by a user defined function. This assert
85      *  indicates neither has been done.
86      */
87     config Assert.Id A_clusterBaseId  = {
88         msg: "A_clusterBaseId: cluster base ID has not been set"
89     };
91     /* @_nodoc */
92     metaonly struct InterruptDataStruct {
93         UInt    remoteCoreId;
94         String  isrFxn;
95         String  isrArg;
96         Bool    isFlagged;
97     }
99     /*!
100      *  ======== rovViewInfo ========
101      */
102     @Facet
103     metaonly config ViewInfo.Instance rovViewInfo =
104         ViewInfo.create({
105             viewMap: [
106                 ['Registered Interrupts',
107                     {
108                         type: ViewInfo.MODULE_DATA,
109                         viewInitFxn: 'viewInterruptsData',
110                         structName: 'InterruptDataStruct'
111                     }
112                 ]
113             ]
114         });
116 internal:
118     /* Shift value used for setting/identifying interrupt source */
119     const UInt SRCSx_SHIFT = 4;
121     /* Ptr to the IPC Generation Registers */
122     config Ptr IPCGR0;
124     /* Ptr to the IPC Acknowledgment Registers */
125     config Ptr IPCAR0;
127     /* Ptr to the IPC Host Generation Host Register */
128     config Ptr IPCGRH;
130     /* Ptr to the IPC Acknowledgement Host Register */
131     config Ptr IPCARH;
133     /* Ptr to the KICK0 Bootcfg Registers */
134     config Ptr KICK0;
136     /* Ptr to the KICK1 Bootcfg Registers */
137     config Ptr KICK1;
139     /* Inter-processor interrupt id (varies per device) */
140     config UInt INTERDSPINT;
142     /* client table entry */
143     struct ClientEntry {
144         Fxn    func;            /* client function */
145         UArg   arg;             /* client argument */
146     };
148     /* hardware configuration data */
149     struct HwCfg {
150         UInt        dnum;           /* DNUM value */
151         UInt        srcsx;          /* source bit position */
152     };
154     /*
155      *  ======== isr ========
156      *  Stub function plugged as interrupt handler
157      */
158     Void isr(UArg arg);
160     /*
161      *  ======== Module_State ========
162      *  Define the module state structure
163      */
164     struct Module_State {
165         UInt        numPlugged;     /* # of times interrupt was registered */
166         UInt16      baseId;         /* cluster base procId */
167         Hwi.Handle  hwi;            /* Hwi object for ipc interrupt */
168         ClientEntry clientTab[];    /* index by clusterId */
169         HwCfg       hwTab[];        /* index by clusterId */
170     };