diff options
Diffstat (limited to 'device/intr.h')
-rw-r--r-- | device/intr.h | 52 |
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 |