CS350 COS
COS
Loading...
Searching...
No Matches
irq.c
Go to the documentation of this file.
1
2#include <stdint.h>
3
4#include <sys/kassert.h>
5#include <sys/irq.h>
6
7#include <machine/trap.h>
8#include <machine/ioapic.h>
9
10LIST_HEAD(IRQHandlerList, IRQHandler);
11struct IRQHandlerList handlers[T_IRQ_LEN];
12
13void
15{
16 int i;
17
18 for (i = 0; i < T_IRQ_LEN; i++)
19 {
21 }
22}
23
24void
26{
27 struct IRQHandler *h;
28 LIST_FOREACH(h, &handlers[irq], link)
29 {
30 h->cb(h->arg);
31 }
32}
33
34void
36{
38
39 LIST_INSERT_HEAD(&handlers[irq], h, link);
40
42}
43
44void
46{
47 LIST_REMOVE(h, link);
48
49 if (LIST_EMPTY(&handlers[irq]))
51}
52
void IOAPIC_Enable(int irq)
Definition: ioapic.c:70
void IOAPIC_Disable(int irq)
Definition: ioapic.c:77
void IRQ_Register(int irq, struct IRQHandler *h)
Definition: irq.c:35
void IRQ_Unregister(int irq, struct IRQHandler *h)
Definition: irq.c:45
void IRQ_Handler(int irq)
Definition: irq.c:25
struct IRQHandlerList handlers[T_IRQ_LEN]
Definition: irq.c:11
void IRQ_Init()
Definition: irq.c:14
#define ASSERT(_x)
Definition: kassert.h:8
#define LIST_INIT(head)
Definition: queue.h:430
#define LIST_REMOVE(elm, field)
Definition: queue.h:465
#define LIST_FOREACH(var, head, field)
Definition: queue.h:410
#define LIST_INSERT_HEAD(head, elm, field)
Definition: queue.h:451
#define LIST_HEAD(name, type)
Definition: queue.h:363
#define LIST_EMPTY(head)
Definition: queue.h:406
static uint8_t irq
Definition: sercons.c:38
Definition: irq.h:7
void * arg
Definition: irq.h:10
void(* cb)(void *)
Definition: irq.h:9
#define T_IRQ_LEN
Definition: trap.h:29