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 37 38 39
40
41 /*!
42 * ======== IInterrupt ========
43 * Interface for the inter-processor interrupts
44 */
45 interface IInterrupt {
46
47 struct IntInfo {
48 UInt localIntId;
49 UInt remoteIntId;
50 UInt intVectorId;
51 }
52
53 /*!
54 * ======== intEnable ========
55 * Enables the interrupt corresponding to intId
56 *
57 * @param(remoteProcId) Remote MultiProc Id
58 * @param(intInfo) Information needed to configure interrupt line
59 */
60 @DirectCall
61 Void intEnable(UInt16 remoteProcId, IntInfo *intInfo);
62
63 /*!
64 * ======== intDisable ========
65 * Disables the interrupt corresponding to intId
66 *
67 * @param(remoteProcId) Remote MultiProc Id
68 * @param(intInfo) Information needed to configure interrupt line
69 */
70 @DirectCall
71 Void intDisable(UInt16 remoteProcId, IntInfo *intInfo);
72
73 /*!
74 * ======== intRegister ========
75 * Register an interrupt line to a remote processor
76 *
77 * @param(remoteProcId) Remote MultiProc Id
78 * @param(intInfo) Information needed to configure interrupt line
79 * @param(func) Function to register.
80 * @param(arg) Argument that will be passed to func
81 */
82 @DirectCall
83 Void intRegister(UInt16 remoteProcId, IntInfo *intInfo, Fxn func, UArg arg);
84
85 /*!
86 * ======== intUnregister ========
87 * Unregister an interrupt line to a remote processor
88 *
89 * @param(remoteProcId) Remote MultiProc Id
90 * @param(intInfo) Information needed to configure interrupt line
91 */
92 @DirectCall
93 Void intUnregister(UInt16 remoteProcId, IntInfo *intInfo);
94
95 /*!
96 * ======== intSend ========
97 * Send interrupt to the remote processor
98 *
99 * @param(remoteProcId) Remote MultiProc Id
100 * @param(intInfo) Information needed to configure interrupt line
101 * @param(arg) Argument for sending interrupt.
102 */
103 @DirectCall
104 Void intSend(UInt16 remoteProcId, IntInfo *intInfo, UArg arg);
105
106 /*!
107 * @_nodoc
108 * Post an interrupt locally.
109 *
110 * Used to simulate receiving an interrupt from a remote (source)
111 * processor
112 *
113 * @param(remoteProcId) Source MultiProc Id
114 * @param(intInfo) Information needed to configure interrupt line
115 * @param(arg) Argument for sending interrupt.
116 */
117 @DirectCall
118 Void intPost(UInt16 srcProcId, IntInfo *intInfo, UArg arg);
119
120 /*!
121 * ======== intClear ========
122 * Clear interrupt
123 *
124 * @param(remoteProcId) Remote MultiProc Id
125 * @param(intInfo) Information needed to configure interrupt line
126 *
127 * @b(returns) Value (if any) of the interrupt before
128 * it was cleared
129 */
130 @DirectCall
131 UInt intClear(UInt16 remoteProcId, IntInfo *intInfo);
132 }