diff options
author | skra <skra@FreeBSD.org> | 2016-02-27 12:03:07 +0000 |
---|---|---|
committer | skra <skra@FreeBSD.org> | 2016-02-27 12:03:07 +0000 |
commit | 27bb203f7c742ba7aa11db8faf7a6cf1f081ce93 (patch) | |
tree | 616f66445d0ef28f24f05592bdfca1a2b041abeb /sys/sys/intr.h | |
parent | 9da1c36d0a8d774c39703ec25190536771eaee70 (diff) | |
download | FreeBSD-src-27bb203f7c742ba7aa11db8faf7a6cf1f081ce93.zip FreeBSD-src-27bb203f7c742ba7aa11db8faf7a6cf1f081ce93.tar.gz |
Move IPI related parts back to (ARM) machine specific file now, when
the interrupt framework is also going to be used by another (MIPS)
architecture. IPI implementations may vary much across different
architectures.
An IPI implementation should still define INTR_IPI_COUNT and use
intr_ipi_setup_counters() to setup IPI counters which are inside of
intrcnt[] and intrnames[] arrays. Those are used for sysctl and ddb.
Then, intr_ipi_increment_count() should be used to increment obtained
counter.
Reviewed by: imp
Differential Revision: https://reviews.freebsd.org/D5459
Diffstat (limited to 'sys/sys/intr.h')
-rw-r--r-- | sys/sys/intr.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/sys/sys/intr.h b/sys/sys/intr.h index 27310a4..294f4d5 100644 --- a/sys/sys/intr.h +++ b/sys/sys/intr.h @@ -39,6 +39,8 @@ #ifndef _SYS_INTR_H_ #define _SYS_INTR_H_ +#include <sys/systm.h> + #ifdef notyet #define INTR_SOLO INTR_MD1 typedef int intr_irq_filter_t(void *arg, struct trapframe *tf); @@ -101,6 +103,8 @@ u_int intr_namespace_map_irq(device_t dev, uint16_t type, uint16_t num); u_int intr_fdt_map_irq(phandle_t, pcell_t *, u_int); #endif +extern device_t intr_irq_root_dev; + int intr_pic_register(device_t dev, intptr_t xref); int intr_pic_unregister(device_t dev, intptr_t xref); int intr_pic_claim_root(device_t dev, intptr_t xref, intr_irq_filter_t *filter, @@ -117,14 +121,19 @@ u_int intr_irq_next_cpu(u_int current_cpu, cpuset_t *cpumask); #ifdef SMP int intr_irq_bind(u_int, int); -void intr_ipi_dispatch(struct intr_irqsrc *isrc, struct trapframe *tf); +void intr_pic_init_secondary(void); -#define AISHF_NOALLOC 0x0001 +/* Virtualization for interrupt source IPI counter increment. */ +static inline void +intr_ipi_increment_count(u_long *counter, u_int cpu) +{ -int intr_ipi_set_handler(u_int ipi, const char *name, intr_ipi_filter_t *filter, - void *arg, u_int flags); + KASSERT(cpu < MAXCPU, ("%s: too big cpu %u", __func__, cpu)); + counter[cpu]++; +} -void intr_pic_init_secondary(void); +/* Virtualization for interrupt source IPI counters setup. */ +u_long * intr_ipi_setup_counters(const char *name); #endif #endif /* _SYS_INTR_H */ |