summaryrefslogtreecommitdiffstats
path: root/sys/sys/intr.h
diff options
context:
space:
mode:
authorskra <skra@FreeBSD.org>2016-02-27 12:03:07 +0000
committerskra <skra@FreeBSD.org>2016-02-27 12:03:07 +0000
commit27bb203f7c742ba7aa11db8faf7a6cf1f081ce93 (patch)
tree616f66445d0ef28f24f05592bdfca1a2b041abeb /sys/sys/intr.h
parent9da1c36d0a8d774c39703ec25190536771eaee70 (diff)
downloadFreeBSD-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.h19
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 */
OpenPOWER on IntegriCloud