summaryrefslogtreecommitdiffstats
path: root/sys/arm/include
diff options
context:
space:
mode:
authorskra <skra@FreeBSD.org>2016-03-24 09:55:11 +0000
committerskra <skra@FreeBSD.org>2016-03-24 09:55:11 +0000
commit2683d49bfb03b764036757d1fdd5754c3412123a (patch)
tree4893de0375aab00843476e8638ec2bd3177250ab /sys/arm/include
parent3f00ea48451e9e4c48321e100d8faae32e73ebcd (diff)
downloadFreeBSD-src-2683d49bfb03b764036757d1fdd5754c3412123a.zip
FreeBSD-src-2683d49bfb03b764036757d1fdd5754c3412123a.tar.gz
Generalize IPI support for ARM intrng and use it for interrupt
controller IPI provider. New struct intr_ipi is defined which keeps all info about an IPI: its name, counter, send and dispatch methods. Generic intr_ipi_setup(), intr_ipi_send() and intr_ipi_dispatch() functions are implemented. An IPI provider must implement two functions: (1) an intr_ipi_send_t function which is able to send an IPI, (2) a setup function which initializes itself for an IPI and calls intr_ipi_setup() with appropriate arguments. Differential Revision: https://reviews.freebsd.org/D5700
Diffstat (limited to 'sys/arm/include')
-rw-r--r--sys/arm/include/intr.h13
-rw-r--r--sys/arm/include/smp.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/sys/arm/include/intr.h b/sys/arm/include/intr.h
index 74d7e4d..a568385 100644
--- a/sys/arm/include/intr.h
+++ b/sys/arm/include/intr.h
@@ -52,14 +52,17 @@
#include <sys/intr.h>
#ifdef SMP
-void intr_ipi_dispatch(struct intr_irqsrc *isrc, struct trapframe *tf);
+typedef void intr_ipi_send_t(void *, cpuset_t);
+typedef void intr_ipi_handler_t(void *);
-#define AISHF_NOALLOC 0x0001
+void intr_ipi_dispatch(u_int, struct trapframe *);
+void intr_ipi_send(cpuset_t, u_int);
-int intr_ipi_set_handler(u_int ipi, const char *name, intr_ipi_filter_t *filter,
- void *arg, u_int flags);
-#endif
+void intr_ipi_setup(u_int, const char *, intr_ipi_handler_t *, void *,
+ intr_ipi_send_t *, void *);
+int intr_pic_ipi_setup(u_int, const char *, intr_ipi_handler_t *, void *);
+#endif
#else /* ARM_INTRNG */
/* XXX move to std.* files? */
diff --git a/sys/arm/include/smp.h b/sys/arm/include/smp.h
index e4d6385..e685cc3 100644
--- a/sys/arm/include/smp.h
+++ b/sys/arm/include/smp.h
@@ -37,8 +37,8 @@ void ipi_cpu(int cpu, u_int ipi);
void ipi_selected(cpuset_t cpus, u_int ipi);
/* PIC interface */
-void pic_ipi_send(cpuset_t cpus, u_int ipi);
#ifndef ARM_INTRNG
+void pic_ipi_send(cpuset_t cpus, u_int ipi);
void pic_ipi_clear(int ipi);
int pic_ipi_read(int arg);
#endif
OpenPOWER on IntegriCloud