summaryrefslogtreecommitdiff
path: root/device/intr.h
diff options
context:
space:
mode:
Diffstat (limited to 'device/intr.h')
-rw-r--r--device/intr.h52
1 files changed, 32 insertions, 20 deletions
diff --git a/device/intr.h b/device/intr.h
index df282c05..cd3e0bce 100644
--- a/device/intr.h
+++ b/device/intr.h
@@ -15,36 +15,48 @@
#ifndef __INTR_H__
#define __INTR_H__
-#include <device/device_types.h>
+#ifndef MACH_XEN
+
+#include <mach/kern_return.h>
+#include <mach/port.h>
#include <kern/queue.h>
-#include <device/notify.h>
+#include <ipc/ipc_port.h>
+#include <device/conf.h>
+
+#define DEVICE_NOTIFY_MSGH_SEQNO 0
+
+#include <sys/types.h>
-typedef struct intr_entry
-{
+struct irqdev;
+#include <machine/irq.h>
+
+typedef struct {
queue_chain_t chain;
- ipc_port_t dest;
- int line;
- int interrupts; /* The number of interrupts occur since last run of intr_thread. */
- int unacked_interrupts; /* Number of times irqs were disabled for this */
+ int interrupts; /* Number of interrupts occurred since last run of intr_thread */
+ int n_unacked; /* Number of times irqs were disabled for this */
+ ipc_port_t dst_port; /* Notification port */
+ int id; /* Mapping to machine dependent irq_t array elem */
} user_intr_t;
-#define DEVICE_NOTIFY_MSGH_SEQNO 0
-
-int install_user_intr_handler (unsigned int line,
- unsigned long flags,
- user_intr_t *user_intr);
+struct irqdev {
+ char *name;
+ void (*irqdev_ack)(struct irqdev *dev, int id);
-/* Returns 0 if action should be removed */
-int deliver_user_intr (int line, user_intr_t *intr);
+ queue_head_t *intr_queue;
+ int tot_num_intr; /* Total number of unprocessed interrupts */
-user_intr_t *insert_intr_entry (int line, ipc_port_t dest);
+ /* Machine dependent */
+ irq_t irq[NINTR];
+};
-/* TODO: should rather take delivery port */
-kern_return_t user_intr_enable (int line, char status);
+extern queue_head_t main_intr_queue;
+extern int install_user_intr_handler (struct irqdev *dev, int id, unsigned long flags, user_intr_t *e);
+extern int deliver_user_intr (struct irqdev *dev, int id, user_intr_t *e);
+extern user_intr_t *insert_intr_entry (struct irqdev *dev, int id, ipc_port_t receive_port);
void intr_thread (void);
+kern_return_t irq_acknowledge (ipc_port_t receive_port);
-void __disable_irq(unsigned int);
-void __enable_irq(unsigned int);
+#endif /* MACH_XEN */
#endif