Rev 1922 | Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1922 | Rev 1923 | ||
---|---|---|---|
Line 34... | Line 34... | ||
34 | 34 | ||
35 | #ifndef KERN_IRQ_H_ |
35 | #ifndef KERN_IRQ_H_ |
36 | #define KERN_IRQ_H_ |
36 | #define KERN_IRQ_H_ |
37 | 37 | ||
38 | #include <arch/types.h> |
38 | #include <arch/types.h> |
- | 39 | #include <typedefs.h> |
|
39 | #include <adt/list.h> |
40 | #include <adt/list.h> |
40 | #include <ipc/ipc.h> |
- | |
41 | #include <ipc/irq.h> |
41 | #include <ipc/irq.h> |
42 | #include <atomic.h> |
- | |
43 | #include <synch/spinlock.h> |
42 | #include <synch/spinlock.h> |
44 | 43 | ||
45 | typedef enum { |
44 | typedef enum { |
46 | IRQ_DECLINE, /**< Decline to service. */ |
45 | IRQ_DECLINE, /**< Decline to service. */ |
47 | IRQ_ACCEPT /**< Accept to service. */ |
46 | IRQ_ACCEPT /**< Accept to service. */ |
Line 50... | Line 49... | ||
50 | typedef enum { |
49 | typedef enum { |
51 | IRQ_TRIGGER_LEVEL = 1, |
50 | IRQ_TRIGGER_LEVEL = 1, |
52 | IRQ_TRIGGER_EDGE |
51 | IRQ_TRIGGER_EDGE |
53 | } irq_trigger_t; |
52 | } irq_trigger_t; |
54 | 53 | ||
55 | typedef struct irq irq_t; |
- | |
56 | - | ||
57 | typedef void (* irq_handler_t)(irq_t *irq, void *arg, ...); |
54 | typedef void (* irq_handler_t)(irq_t *irq, void *arg, ...); |
58 | 55 | ||
59 | /** Structure representing one device IRQ. |
56 | /** Structure representing one device IRQ. |
60 | * |
57 | * |
61 | * If one device has multiple interrupts, there will |
58 | * If one device has multiple interrupts, there will |
Line 85... | Line 82... | ||
85 | /** Handler for this IRQ and device. */ |
82 | /** Handler for this IRQ and device. */ |
86 | irq_handler_t handler; |
83 | irq_handler_t handler; |
87 | /** Argument for the handler. */ |
84 | /** Argument for the handler. */ |
88 | void *arg; |
85 | void *arg; |
89 | 86 | ||
90 | /** Answerbox of the task that wanted to be notified. */ |
- | |
91 | answerbox_t *notif_answerbox; |
- | |
92 | /** Pseudo-code to be performed by the top-half |
- | |
93 | * before a notification is sent. */ |
87 | /** Notification configuration structure. */ |
94 | irq_code_t *code; |
- | |
95 | /** Method of the notification. */ |
88 | ipc_notif_cfg_t notif_cfg; |
96 | unative_t method; |
- | |
97 | /** Counter of IRQ notifications. */ |
- | |
98 | atomic_t counter; |
- | |
99 | }; |
89 | }; |
100 | 90 | ||
101 | extern void irq_init(count_t inrs, count_t chains); |
91 | extern void irq_init(count_t inrs, count_t chains); |
102 | extern void irq_initialize(irq_t *irq); |
92 | extern void irq_initialize(irq_t *irq); |
103 | extern void irq_register(irq_t *irq); |
93 | extern void irq_register(irq_t *irq); |