diff options
author | skra <skra@FreeBSD.org> | 2016-03-24 09:55:11 +0000 |
---|---|---|
committer | skra <skra@FreeBSD.org> | 2016-03-24 09:55:11 +0000 |
commit | 2683d49bfb03b764036757d1fdd5754c3412123a (patch) | |
tree | 4893de0375aab00843476e8638ec2bd3177250ab /sys/arm/include | |
parent | 3f00ea48451e9e4c48321e100d8faae32e73ebcd (diff) | |
download | FreeBSD-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.h | 13 | ||||
-rw-r--r-- | sys/arm/include/smp.h | 2 |
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 |