aboutsummaryrefslogtreecommitdiff
path: root/sys/arm
diff options
context:
space:
mode:
authorJessica Clarke <jrtc27@FreeBSD.org>2024-01-24 23:49:53 +0000
committerJessica Clarke <jrtc27@FreeBSD.org>2024-01-24 23:49:53 +0000
commitfae8755f16ff5b9bdc32df046e0f16c0cbb48a29 (patch)
tree15b0ae9cd98e63541aa661ae6fab74287763be43 /sys/arm
parente06afdb2856944d6db4e33d4bbe0e2dbbd057eb4 (diff)
downloadsrc-fae8755f16ff5b9bdc32df046e0f16c0cbb48a29.tar.gz
src-fae8755f16ff5b9bdc32df046e0f16c0cbb48a29.zip
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/machdep_intr.c126
-rw-r--r--sys/arm/arm/mp_machdep.c10
-rw-r--r--sys/arm/include/intr.h13
3 files changed, 7 insertions, 142 deletions
diff --git a/sys/arm/arm/machdep_intr.c b/sys/arm/arm/machdep_intr.c
index fc16741a49fa..712336e7c048 100644
--- a/sys/arm/arm/machdep_intr.c
+++ b/sys/arm/arm/machdep_intr.c
@@ -29,39 +29,10 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/syslog.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/proc.h>
-#include <sys/bus.h>
-#include <sys/interrupt.h>
-#include <sys/conf.h>
-#include <sys/pmc.h>
-#include <sys/pmckern.h>
-#include <sys/smp.h>
-#include <machine/atomic.h>
-#include <machine/bus.h>
-#include <machine/intr.h>
#include <machine/cpu.h>
-#include <machine/smp.h>
-
-#include "pic_if.h"
-
-#ifdef SMP
-#define INTR_IPI_NAMELEN (MAXCOMLEN + 1)
-
-struct intr_ipi {
- intr_ipi_handler_t * ii_handler;
- void * ii_handler_arg;
- intr_ipi_send_t * ii_send;
- void * ii_send_arg;
- char ii_name[INTR_IPI_NAMELEN];
- u_long * ii_count;
-};
-
-static struct intr_ipi ipi_sources[INTR_IPI_COUNT];
-#endif
+#include <machine/cpufunc.h>
+#include <machine/intr.h>
/*
* arm_irq_memory_barrier()
@@ -125,96 +96,3 @@ arm_irq_memory_barrier(uintptr_t irq)
dsb();
cpu_l2cache_drain_writebuf();
}
-
-#ifdef SMP
-static inline struct intr_ipi *
-intr_ipi_lookup(u_int ipi)
-{
-
- if (ipi >= INTR_IPI_COUNT)
- panic("%s: no such IPI %u", __func__, ipi);
-
- return (&ipi_sources[ipi]);
-}
-
-void
-intr_ipi_dispatch(u_int ipi)
-{
- struct intr_ipi *ii;
-
- ii = intr_ipi_lookup(ipi);
- if (ii->ii_count == NULL)
- panic("%s: not setup IPI %u", __func__, ipi);
-
- intr_ipi_increment_count(ii->ii_count, PCPU_GET(cpuid));
-
- ii->ii_handler(ii->ii_handler_arg);
-}
-
-void
-intr_ipi_send(cpuset_t cpus, u_int ipi)
-{
- struct intr_ipi *ii;
-
- ii = intr_ipi_lookup(ipi);
- if (ii->ii_count == NULL)
- panic("%s: not setup IPI %u", __func__, ipi);
-
- ii->ii_send(ii->ii_send_arg, cpus, ipi);
-}
-
-void
-intr_ipi_setup(u_int ipi, const char *name, intr_ipi_handler_t *hand,
- void *h_arg, intr_ipi_send_t *send, void *s_arg)
-{
- struct intr_ipi *ii;
-
- ii = intr_ipi_lookup(ipi);
-
- KASSERT(hand != NULL, ("%s: ipi %u no handler", __func__, ipi));
- KASSERT(send != NULL, ("%s: ipi %u no sender", __func__, ipi));
- KASSERT(ii->ii_count == NULL, ("%s: ipi %u reused", __func__, ipi));
-
- ii->ii_handler = hand;
- ii->ii_handler_arg = h_arg;
- ii->ii_send = send;
- ii->ii_send_arg = s_arg;
- strlcpy(ii->ii_name, name, INTR_IPI_NAMELEN);
- ii->ii_count = intr_ipi_setup_counters(name);
-}
-
-/*
- * Send IPI thru interrupt controller.
- */
-static void
-pic_ipi_send(void *arg, cpuset_t cpus, u_int ipi)
-{
-
- KASSERT(intr_irq_root_dev != NULL, ("%s: no root attached", __func__));
- PIC_IPI_SEND(intr_irq_root_dev, arg, cpus, ipi);
-}
-
-/*
- * Setup IPI handler on interrupt controller.
- *
- * Not SMP coherent.
- */
-int
-intr_pic_ipi_setup(u_int ipi, const char *name, intr_ipi_handler_t *hand,
- void *arg)
-{
- int error;
- struct intr_irqsrc *isrc;
-
- KASSERT(intr_irq_root_dev != NULL, ("%s: no root attached", __func__));
-
- error = PIC_IPI_SETUP(intr_irq_root_dev, ipi, &isrc);
- if (error != 0)
- return (error);
-
- isrc->isrc_handlers++;
- intr_ipi_setup(ipi, name, hand, arg, pic_ipi_send, isrc);
- PIC_ENABLE_INTR(intr_irq_root_dev, isrc);
- return (0);
-}
-#endif
diff --git a/sys/arm/arm/mp_machdep.c b/sys/arm/arm/mp_machdep.c
index 0d78ef789d6e..01b02d9520ca 100644
--- a/sys/arm/arm/mp_machdep.c
+++ b/sys/arm/arm/mp_machdep.c
@@ -300,11 +300,11 @@ release_aps(void *dummy __unused)
if (mp_ncpus == 1)
return;
- intr_pic_ipi_setup(IPI_RENDEZVOUS, "rendezvous", ipi_rendezvous, NULL);
- intr_pic_ipi_setup(IPI_AST, "ast", ipi_ast, NULL);
- intr_pic_ipi_setup(IPI_STOP, "stop", ipi_stop, NULL);
- intr_pic_ipi_setup(IPI_PREEMPT, "preempt", ipi_preempt, NULL);
- intr_pic_ipi_setup(IPI_HARDCLOCK, "hardclock", ipi_hardclock, NULL);
+ intr_ipi_setup(IPI_RENDEZVOUS, "rendezvous", ipi_rendezvous, NULL);
+ intr_ipi_setup(IPI_AST, "ast", ipi_ast, NULL);
+ intr_ipi_setup(IPI_STOP, "stop", ipi_stop, NULL);
+ intr_ipi_setup(IPI_PREEMPT, "preempt", ipi_preempt, NULL);
+ intr_ipi_setup(IPI_HARDCLOCK, "hardclock", ipi_hardclock, NULL);
atomic_store_rel_int(&aps_ready, 1);
/* Wake the other threads up */
diff --git a/sys/arm/include/intr.h b/sys/arm/include/intr.h
index 21829c5782bc..d0d0ff9fc32a 100644
--- a/sys/arm/include/intr.h
+++ b/sys/arm/include/intr.h
@@ -49,19 +49,6 @@
#include <sys/intr.h>
-#ifdef SMP
-typedef void intr_ipi_send_t(void *, cpuset_t, u_int);
-typedef void intr_ipi_handler_t(void *);
-
-void intr_ipi_dispatch(u_int);
-void intr_ipi_send(cpuset_t, u_int);
-
-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
-
void arm_irq_memory_barrier(uintptr_t);
#endif /* _MACHINE_INTR_H */