Ugly #ifdef's turned into nice macros
[AROS.git] / rom / exec / addintserver.c
blob5985f3b0706522e129c9dc89e4f8e0e23cf24610
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Add interrupt client to chain of interrupt servers
6 Lang: english
7 */
9 #define DEBUG 1
11 #include <aros/debug.h>
12 #include <aros/libcall.h>
13 #include <exec/execbase.h>
14 #include <exec/interrupts.h>
15 #include <hardware/intbits.h>
16 #include <proto/exec.h>
18 #include "chipset.h"
20 /*****************************************************************************
22 NAME */
24 AROS_LH2(void, AddIntServer,
26 /* SYNOPSIS */
27 AROS_LHA(ULONG, intNumber, D0),
28 AROS_LHA(struct Interrupt *, interrupt, A1),
30 /* LOCATION */
31 struct ExecBase *, SysBase, 28, Exec)
33 /* FUNCTION
35 INPUTS
37 RESULT
39 NOTES
40 This function also enables the corresponding chipset interrupt if
41 run on a native Amiga.
43 EXAMPLE
45 BUGS
47 SEE ALSO
49 INTERNALS
51 ******************************************************************************/
53 AROS_LIBFUNC_INIT
55 D(bug("[AddIntServer] Vector %d, list 0x%p, SysBase 0x%p\n", intNumber, SysBase->IntVects[intNumber].iv_Data, SysBase));
57 if (SysBase->IntVects[intNumber].iv_Data == 0)
59 int i;
61 for (i = 0; i < 16; i++)
63 bug("[AddIntServer] Vector %d, code 0x%p, data 0x%p\n", i, SysBase->IntVects[i].iv_Code, SysBase->IntVects[i].iv_Data);
65 for(;;);
68 Disable();
70 Enqueue((struct List *)SysBase->IntVects[intNumber].iv_Data, &interrupt->is_Node);
71 CUSTOM_ENABLE(intNumber);
73 Enable();
75 AROS_LIBFUNC_EXIT
76 } /* AddIntServer */