summaryrefslogtreecommitdiff
path: root/device/intr.c
diff options
context:
space:
mode:
Diffstat (limited to 'device/intr.c')
-rw-r--r--device/intr.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/device/intr.c b/device/intr.c
index 56f0c32c..a757b25c 100644
--- a/device/intr.c
+++ b/device/intr.c
@@ -24,7 +24,7 @@
#ifndef MACH_XEN
queue_head_t main_intr_queue;
-static boolean_t deliver_intr (int id, ipc_port_t dst_port);
+static boolean_t deliver_intr (int id, mach_msg_id_t msgh_id, ipc_port_t dst_port);
static user_intr_t *
search_intr (struct irqdev *dev, ipc_port_t dst_port)
@@ -113,7 +113,7 @@ deliver_user_intr (struct irqdev *dev, int id, user_intr_t *e)
* This entry exists in the queue until
* the corresponding interrupt port is removed.*/
user_intr_t *
-insert_intr_entry (struct irqdev *dev, int id, ipc_port_t dst_port)
+insert_intr_entry (struct irqdev *dev, int id, ipc_port_t dst_port, int compat)
{
user_intr_t *e, *new, *ret;
int free = 0;
@@ -137,6 +137,7 @@ insert_intr_entry (struct irqdev *dev, int id, ipc_port_t dst_port)
new->id = id;
new->dst_port = dst_port;
new->interrupts = 0;
+ new->compat = compat;
queue_enter (dev->intr_queue, new, user_intr_t *, chain);
out:
@@ -207,7 +208,7 @@ intr_thread (void)
irqtab.tot_num_intr--;
splx (s);
- deliver_intr (id, dst_port);
+ deliver_intr (id, e->compat ? 424242 : DEVICE_INTR_NOTIFY, dst_port);
s = splhigh ();
}
}
@@ -236,7 +237,7 @@ intr_thread (void)
}
static boolean_t
-deliver_intr (int id, ipc_port_t dst_port)
+deliver_intr (int id, mach_msg_id_t msgh_id, ipc_port_t dst_port)
{
ipc_kmsg_t kmsg;
device_intr_notification_t *n;
@@ -260,7 +261,7 @@ deliver_intr (int id, ipc_port_t dst_port)
m->msgh_seqno = DEVICE_NOTIFY_MSGH_SEQNO;
m->msgh_local_port = MACH_PORT_NULL;
m->msgh_remote_port = MACH_PORT_NULL;
- m->msgh_id = DEVICE_INTR_NOTIFY;
+ m->msgh_id = msgh_id;
t->msgt_name = MACH_MSG_TYPE_INTEGER_32;
t->msgt_size = 32;