move Drivers -> drivers
[AROS.git] / arch / i386-pc / drivers / irq.hidd / irqclass.c
blobaa20d249d38f513a673fb6cbe057907ba21add66
1 /*
2 Copyright © 1995-2006, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: IRQ class
6 Lang: english
7 */
9 #include <hidd/irq.h>
11 #include <proto/exec.h>
12 #include <proto/utility.h>
13 #include <proto/oop.h>
15 #include <exec/alerts.h>
16 #include <exec/memory.h>
17 #include <aros/system.h>
19 #include "irq.h"
21 #define DEBUG 0
22 #include <aros/debug.h>
24 /* Don't initialize them with "= 0", otherwise they end up in the DATA segment! */
26 static OOP_AttrBase HiddIRQAttrBase;
28 static struct OOP_ABDescr attrbases[] =
30 { IID_Hidd_IRQ, &HiddIRQAttrBase },
31 { NULL, NULL }
34 /*** HIDDIRQ::AddHandler() ***************************************/
36 BOOL PCIrq__Hidd_IRQ__AddHandler(OOP_Class *cl, OOP_Object *obj, struct pHidd_IRQ_AddHandler *msg)
38 LONG irqnum = msg->id;
40 EnterFunc(bug("HIDDIRQ::AddHandler()\n"));
41 D(bug("Adding handler %s, irq %d\n",msg->handlerinfo->h_Node.ln_Name, msg->id));
43 if (msg->id < 0)
45 switch (msg->id)
47 case vHidd_IRQ_Timer:
48 irqnum = 0;
49 break;
51 case vHidd_IRQ_Keyboard:
52 irqnum = 1;
53 break;
55 case vHidd_IRQ_Serial2:
56 irqnum = 3;
57 break;
59 case vHidd_IRQ_Serial1:
60 irqnum = 4;
61 break;
63 case vHidd_IRQ_Floppy:
64 irqnum = 6;
65 break;
67 case vHidd_IRQ_RTC:
68 irqnum = 8;
69 break;
71 case vHidd_IRQ_Mouse:
72 irqnum = 12;
73 break;
75 case vHidd_IRQ_HDD1:
76 irqnum = 14;
77 break;
79 case vHidd_IRQ_HDD2:
80 irqnum = 15;
81 break;
85 D(bug("Translated IRQ number is %d\n", irqnum));
87 if (irqnum >= 0 && irqnum < 16)
89 /* Adding an IRQ handler has to be atomic */
90 Disable();
91 Enqueue((struct List *)&ISD(cl)->irqlist[irqnum],(struct Node *)msg->handlerinfo);
92 Enable();
94 ReturnInt("HIDDIRQ::AddHandler", ULONG, TRUE);
97 ReturnInt("HIDDIRQ::AddHandler", ULONG, FALSE);
100 /*** HIDDIRQ::RemHandler() ***************************************/
102 VOID PCIrq__Hidd_IRQ__RemHandler(OOP_Class *cl, OOP_Object *obj, struct pHidd_IRQ_RemHandler *msg)
104 EnterFunc(bug("HIDDIRQ::RemHandler()\n"));
105 D(bug("Removing handler %s\n",msg->handlerinfo->h_Node.ln_Name));
107 Disable();
108 Remove((struct Node *)msg->handlerinfo);
109 Enable();
111 ReturnVoid("HIDDIRQ::RemHandler");
114 /*** HIDDIRQ::CauseIRQ() *****************************************/
116 VOID PCIrq__Hidd_IRQ__CauseIRQ(OOP_Class *cl, OOP_Object *obj, struct pHidd_CauseIRQ *msg)
118 EnterFunc(bug("HIDDIRQ::CauseIRQ()\n"));
119 #warning TODO: Write CauseIRQ method
120 ReturnVoid("HIDDIRQ::CauseIRQ");