2 Copyright © 1995-2017, The AROS Development Team. All rights reserved.
5 Desc: Install an interrupt handler.
8 #include <exec/execbase.h>
9 #include <exec/interrupts.h>
10 #include <proto/exec.h>
11 #include <aros/libcall.h>
13 #include "exec_intern.h"
14 #include "exec_debug.h"
15 #include "exec_locks.h"
17 /*****************************************************************************
21 AROS_LH2(struct Interrupt
*, SetIntVector
,
24 AROS_LHA(ULONG
, intNumber
, D0
),
25 AROS_LHA(struct Interrupt
*, interrupt
, A1
),
28 struct ExecBase
*, SysBase
, 27, Exec
)
46 ******************************************************************************/
49 struct Interrupt
*oldint
;
50 BOOL ishandler
= intNumber
<= 2 || (intNumber
>= 6 && intNumber
<= 12);
52 ExecLog(SysBase
, EXECDEBUGF_EXCEPTHANDLER
, "SetIntVector: Int %d, Interrupt %p\n", intNumber
, interrupt
);
54 EXEC_LOCK_LIST_WRITE_AND_DISABLE(&SysBase
->IntrList
);
56 oldint
= (struct Interrupt
*)SysBase
->IntVects
[intNumber
].iv_Node
;
57 SysBase
->IntVects
[intNumber
].iv_Node
= ishandler
? (struct Node
*)interrupt
: NULL
;
61 SysBase
->IntVects
[intNumber
].iv_Data
= interrupt
->is_Data
;
62 SysBase
->IntVects
[intNumber
].iv_Code
= interrupt
->is_Code
;
66 SysBase
->IntVects
[intNumber
].iv_Data
= (APTR
)~0;
67 SysBase
->IntVects
[intNumber
].iv_Code
= (void *)~0;
70 EXEC_UNLOCK_LIST_AND_ENABLE(&SysBase
->IntrList
);