summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/shared/src/irq-info.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/shared/src/irq-info.c')
-rw-r--r--c/src/lib/libbsp/shared/src/irq-info.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/shared/src/irq-info.c b/c/src/lib/libbsp/shared/src/irq-info.c
new file mode 100644
index 0000000000..6736d508b7
--- /dev/null
+++ b/c/src/lib/libbsp/shared/src/irq-info.c
@@ -0,0 +1,88 @@
+/**
+ * @file
+ *
+ * @ingroup bsp_interrupt
+ *
+ * @brief Source file for generic BSP interrupt information code.
+ */
+
+/*
+ * Copyright (c) 2008
+ * Embedded Brains GmbH
+ * Obere Lagerstr. 30
+ * D-82178 Puchheim
+ * Germany
+ * rtems@embedded-brains.de
+ *
+ * The license and distribution terms for this file may be found in the file
+ * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
+ */
+
+#include <inttypes.h>
+
+#include <rtems/irq.h>
+
+#include <bsp/irq-generic.h>
+#include <bsp/irq-info.h>
+#include <bsp/irq-config.h>
+
+typedef struct {
+ void *context;
+ rtems_printk_plugin_t print;
+ rtems_vector_number vector;
+} bsp_interrupt_report_entry;
+
+static void bsp_interrupt_report_per_handler_routine(
+ void *arg,
+ const char *info,
+ rtems_option options,
+ rtems_interrupt_handler handler,
+ void *handler_arg
+)
+{
+ bsp_interrupt_report_entry *e = (bsp_interrupt_report_entry *) arg;
+ const char *opt = options == RTEMS_INTERRUPT_UNIQUE ? "UNIQUE" : "SHARED";
+
+ e->print( e->context, "%7" PRIu32 " | %-32s | %7s | %010p | %010p\n", e->vector, info, opt, handler, handler_arg);
+}
+
+/**
+ * @brief Prints interrupt information via the printk plugin @a print with the
+ * context @a context.
+ */
+void bsp_interrupt_report_with_plugin( void *context, rtems_printk_plugin_t print)
+{
+ rtems_vector_number v = 0;
+ bsp_interrupt_report_entry e = {
+ .context = context,
+ .print = print,
+ .vector = 0
+ };
+
+ print(
+ context,
+ "-------------------------------------------------------------------------------\n"
+ " INTERRUPT INFORMATION\n"
+ "--------+----------------------------------+---------+------------+------------\n"
+ " VECTOR | INFO | OPTIONS | HANDLER | ARGUMENT \n"
+ "--------+----------------------------------+---------+------------+------------\n"
+ );
+
+ for (v = BSP_INTERRUPT_VECTOR_MIN; v <= BSP_INTERRUPT_VECTOR_MAX; ++v) {
+ e.vector = v;
+ (void) rtems_interrupt_handler_iterate( v, bsp_interrupt_report_per_handler_routine, &e);
+ }
+
+ print(
+ context,
+ "--------+----------------------------------+---------+------------+------------\n"
+ );
+}
+
+/**
+ * @brief Prints interrupt information via the default printk plugin.
+ */
+void bsp_interrupt_report( void)
+{
+ bsp_interrupt_report_with_plugin( NULL, printk_plugin);
+}