1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34
35
36 import xdc.rov.ViewInfo;
37
38 /*!
39 * ======== Interrupt ========
40 * C647x/C667x based interrupt manager
41 */
42 @ModuleStartup
43
44 module Interrupt inherits ti.sdo.ipc.notifyDrivers.IInterrupt
45 {
46
47 metaonly struct InterruptDataStruct {
48 UInt remoteCoreId;
49 String isrFxn;
50 String isrArg;
51 Bool isFlagged;
52 }
53
54 /*!
55 * ======== rovViewInfo ========
56 */
57 @Facet
58 metaonly config ViewInfo.Instance rovViewInfo =
59 ViewInfo.create({
60 viewMap: [
61 ['Registered Interrupts',
62 {
63 type: ViewInfo.MODULE_DATA,
64 viewInitFxn: 'viewInterruptsData',
65 structName: 'InterruptDataStruct'
66 }
67 ],
68 ]
69 });
70
71 /*!
72 * ======== enableKick ========
73 * If set to 'true' IPC will unlock the KICK registers on C66x devices
74 *
75 * IPC unlocks the KICK registers on the local core if (and only if) all
76 * the following conditions are met:
77 * - This configuration is set to 'true'
78 * - SharedRegion #0 is valid and the local core is its owner
79 * - SharedRegion #0 is not valid and the local core is CORE0
80 */
81 config Bool enableKick = true;
82
83 internal:
84
85 /*! Shift value used for setting/identifying interrupt source */
86 const UInt SRCSx_SHIFT = 4;
87
88 /*! Ptr to the IPC Generation Registers */
89 config Ptr IPCGR0;
90
91 /*! Ptr to the IPC Acknowledgment Registers */
92 config Ptr IPCAR0;
93
94 /*! Ptr to the KICK0 Bootcfg Registers */
95 config Ptr KICK0;
96
97 /*! Ptr to the KICK1 Bootcfg Registers */
98 config Ptr KICK1;
99
100 /*! Inter-processor interrupt id (varies per device) */
101 config UInt INTERDSPINT;
102
103 /*! Function table */
104 struct FxnTable {
105 Fxn func;
106 UArg arg;
107 }
108
109 /*!
110 * ======== intShmStub ========
111 * Stub function plugged as interrupt handler
112 */
113 Void intShmStub(UArg arg);
114
115 struct Module_State {
116 FxnTable fxnTable[];
117 UInt numPlugged;
118 };
119 }