summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <justus@gnupg.org>2016-02-25 18:56:43 +0100
committerJustus Winter <justus@gnupg.org>2016-02-25 20:15:03 +0100
commitf7c2f4ba69c3ae7df8fddcc2969e2c21e109dbd1 (patch)
tree6c60dd687de4746e5e5e0b261771c84b5f6c1c82
parent9ad7eb46b65b7324dd5f2c6f5568b6a0e033a5f4 (diff)
Disable disabling the irq via device_intr_enable
-rw-r--r--device/ds_routines.c9
-rw-r--r--device/intr.c3
-rw-r--r--include/mach/experimental.defs22
3 files changed, 21 insertions, 13 deletions
diff --git a/device/ds_routines.c b/device/ds_routines.c
index 4f6b345..9d399ee 100644
--- a/device/ds_routines.c
+++ b/device/ds_routines.c
@@ -1844,11 +1844,10 @@ experimental_device_intr_enable(ipc_port_t master_port, int line, char status)
if (master_port != master_device_port)
return D_INVALID_OPERATION;
- if (status)
- /* TODO: better name for generic-to-arch-specific call */
- enable_irq (line);
- else
- disable_irq (line);
+ if (! status)
+ return D_INVALID_OPERATION;
+
+ enable_irq (line);
return 0;
#endif /* MACH_XEN */
}
diff --git a/device/intr.c b/device/intr.c
index 6fca328..02e0bab 100644
--- a/device/intr.c
+++ b/device/intr.c
@@ -35,11 +35,12 @@ search_intr (int line, ipc_port_t dest)
return NULL;
}
+void intr_thread (void);
+
/* This function can only be used in the interrupt handler. */
void
queue_intr (int line, ipc_port_t dest)
{
- extern void intr_thread ();
struct intr_entry *e;
cli ();
diff --git a/include/mach/experimental.defs b/include/mach/experimental.defs
index ca1eb92..11c51d6 100644
--- a/include/mach/experimental.defs
+++ b/include/mach/experimental.defs
@@ -52,19 +52,27 @@ routine device_intr_register(
in flags : int;
in receive_port : mach_port_send_t
);
+/* JW: It doesn't look safe to pass flags through. dde sets
+ * SA_SHIRQ.
+ *
+ * ID seems unused. dde hands in 0.
+ */
/*
- * enable/disable the specified line.
+ * enable the specified line.
+ */
+/* Is the disable part actually used at all? -- No. */
+/* AIUI, the kernel IRQ handler should always disable the line; and
+ * the userspace driver only has to reenable it, after acknowledging
+ * and handling the interrupt...
+ *
+ * -- Indeed, and we should change the interface so that the irq is
+ * also re-enabled if the driver crashes.
*/
-/* XXX: Naming a function taht can disable something "xxx_enable" is confusing. */
-/* Is the disable part actually used at all? AIUI, the kernel IRQ handler
-should always disable the line; and the userspace driver only has to
-reenable it, after acknowledging and handling the interrupt...
-*/
routine device_intr_enable(
master_port : mach_port_t;
line : int;
- status : char);
+ status : char /* MUST be true-ish */);
/*
* This routine is created for allocating DMA buffers.