Rev 3875 | Rev 3941 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3875 | Rev 3906 | ||
|---|---|---|---|
| Line 77... | Line 77... | ||
| 77 | IRQ_TRIGGER_LEVEL = 1, |
77 | IRQ_TRIGGER_LEVEL = 1, |
| 78 | IRQ_TRIGGER_EDGE |
78 | IRQ_TRIGGER_EDGE |
| 79 | } irq_trigger_t; |
79 | } irq_trigger_t; |
| 80 | 80 | ||
| 81 | struct irq; |
81 | struct irq; |
| 82 | typedef void (* irq_handler_t)(struct irq *irq, void *arg, ...); |
82 | typedef void (* irq_handler_t)(struct irq *); |
| 83 | 83 | ||
| 84 | /** Type for function used to clear the interrupt. */ |
84 | /** Type for function used to clear the interrupt. */ |
| 85 | typedef void (* cir_t)(void *arg, inr_t inr); |
85 | typedef void (* cir_t)(void *, inr_t); |
| 86 | 86 | ||
| 87 | /** IPC notification config structure. |
87 | /** IPC notification config structure. |
| 88 | * |
88 | * |
| 89 | * Primarily, this structure is encapsulated in the irq_t structure. |
89 | * Primarily, this structure is encapsulated in the irq_t structure. |
| 90 | * It is protected by irq_t::lock. |
90 | * It is protected by irq_t::lock. |
| Line 137... | Line 137... | ||
| 137 | /** Actual IRQ number. -1 if not yet assigned. */ |
137 | /** Actual IRQ number. -1 if not yet assigned. */ |
| 138 | inr_t inr; |
138 | inr_t inr; |
| 139 | /** Trigger level of the IRQ. */ |
139 | /** Trigger level of the IRQ. */ |
| 140 | irq_trigger_t trigger; |
140 | irq_trigger_t trigger; |
| 141 | /** Claim ownership of the IRQ. */ |
141 | /** Claim ownership of the IRQ. */ |
| 142 | irq_ownership_t (* claim)(void); |
142 | irq_ownership_t (* claim)(void *); |
| 143 | /** Handler for this IRQ and device. */ |
143 | /** Handler for this IRQ and device. */ |
| 144 | irq_handler_t handler; |
144 | irq_handler_t handler; |
| 145 | /** Argument for the handler. */ |
145 | /** Instance argument for the handler and the claim function. */ |
| 146 | void *arg; |
146 | void *instance; |
| 147 | 147 | ||
| 148 | /** Clear interrupt routine. */ |
148 | /** Clear interrupt routine. */ |
| 149 | cir_t cir; |
149 | cir_t cir; |
| 150 | /** First argument to the clear interrupt routine. */ |
150 | /** First argument to the clear interrupt routine. */ |
| 151 | void *cir_arg; |
151 | void *cir_arg; |
| 152 | 152 | ||
| 153 | /** Notification configuration structure. */ |
153 | /** Notification configuration structure. */ |
| 154 | ipc_notif_cfg_t notif_cfg; |
154 | ipc_notif_cfg_t notif_cfg; |
| 155 | } irq_t; |
155 | } irq_t; |
| 156 | 156 | ||
| 157 | extern void irq_init(count_t inrs, count_t chains); |
157 | extern void irq_init(count_t, count_t); |
| 158 | extern void irq_initialize(irq_t *irq); |
158 | extern void irq_initialize(irq_t *); |
| 159 | extern void irq_register(irq_t *irq); |
159 | extern void irq_register(irq_t *); |
| 160 | extern irq_t *irq_dispatch_and_lock(inr_t inr); |
160 | extern irq_t *irq_dispatch_and_lock(inr_t); |
| 161 | extern irq_t *irq_find_and_lock(inr_t inr, devno_t devno); |
161 | extern irq_t *irq_find_and_lock(inr_t, devno_t); |
| 162 | 162 | ||
| 163 | #endif |
163 | #endif |
| 164 | 164 | ||
| 165 | #endif |
165 | #endif |
| 166 | 166 | ||