1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17
18
19 /*!
20 * ======== IInterrupt ========
21 * Interface for the inter-processor interrupts
22 */
23 interface IInterrupt {
24
25 struct IntInfo {
26 UInt localIntId;
27 UInt remoteIntId;
28 UInt intVectorId;
29 }
30
31 /*!
32 * ======== intEnable ========
33 * Enables the interrupt corresponding to intId
34 *
35 * @param(remoteProcId) Remote MultiProc Id
36 * @param(intInfo) Information needed to configure interrupt line
37 */
38 Void intEnable(UInt16 remoteProcId, IntInfo *intInfo);
39
40 /*!
41 * ======== intDisable ========
42 * Disables the interrupt corresponding to intId
43 *
44 * @param(remoteProcId) Remote MultiProc Id
45 * @param(intInfo) Information needed to configure interrupt line
46 */
47 Void intDisable(UInt16 remoteProcId, IntInfo *intInfo);
48
49 /*!
50 * ======== intRegister ========
51 * Register an interrupt line to a remote processor
52 *
53 * @param(remoteProcId) Remote MultiProc Id
54 * @param(intInfo) Information needed to configure interrupt line
55 * @param(func) Function to register.
56 * @param(arg) Argument that will be passed to func
57 */
58 Void intRegister(UInt16 remoteProcId, IntInfo *intInfo, Fxn func, UArg arg);
59
60 /*!
61 * ======== intUnregister ========
62 * Unregister an interrupt line to a remote processor
63 *
64 * @param(remoteProcId) Remote MultiProc Id
65 * @param(intInfo) Information needed to configure interrupt line
66 */
67 Void intUnregister(UInt16 remoteProcId, IntInfo *intInfo);
68
69 /*!
70 * ======== intSend ========
71 * Send interrupt to the remote processor
72 *
73 * @param(remoteProcId) Remote MultiProc Id
74 * @param(intInfo) Information needed to configure interrupt line
75 * @param(arg) Argument for sending interrupt.
76 */
77 Void intSend(UInt16 remoteProcId, IntInfo *intInfo, UArg arg);
78
79 /*!
80 * @_nodoc
81 * Post an interrupt locally.
82 *
83 * Used to simulate receiving an interrupt from a remote (source)
84 * processor
85 *
86 * @param(remoteProcId) Source MultiProc Id
87 * @param(intInfo) Information needed to configure interrupt line
88 * @param(arg) Argument for sending interrupt.
89 */
90 Void intPost(UInt16 srcProcId, IntInfo *intInfo, UArg arg);
91
92 /*!
93 * ======== intClear ========
94 * Clear interrupt
95 *
96 * @param(remoteProcId) Remote MultiProc Id
97 * @param(intInfo) Information needed to configure interrupt line
98 *
99 * @b(returns) Value (if any) of the interrupt before
100 * it was cleared
101 */
102 UInt intClear(UInt16 remoteProcId, IntInfo *intInfo);
103 }