summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2016-05-06 17:40:22 +1000
committerChris Johns <chrisj@rtems.org>2016-05-11 11:45:01 +1000
commit43f18a14aeb46a5856d50a4d422b3d86d431d4e8 (patch)
treed3ab7ed53af12ca86ad153323b26f06447e50773 /c
parentibchip/ns16550: Minor optimisation. (diff)
downloadrtems-43f18a14aeb46a5856d50a4d422b3d86d431d4e8.tar.bz2
bsp/shared: Add bsp_interrupt_handler_is_empty.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/shared/include/irq-generic.h15
-rw-r--r--c/src/lib/libbsp/shared/src/irq-generic.c19
2 files changed, 33 insertions, 1 deletions
diff --git a/c/src/lib/libbsp/shared/include/irq-generic.h b/c/src/lib/libbsp/shared/include/irq-generic.h
index 389bd5a2bf..4e89d74ab3 100644
--- a/c/src/lib/libbsp/shared/include/irq-generic.h
+++ b/c/src/lib/libbsp/shared/include/irq-generic.h
@@ -17,6 +17,8 @@
* Germany
* <rtems@embedded-brains.de>
*
+ * Copyright (c) 2016 Chris Johns <chrisj@rtems.org>
+ *
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
@@ -106,7 +108,7 @@ static inline rtems_vector_number bsp_interrupt_handler_index(
* @defgroup bsp_interrupt BSP Interrupt Support
*
* @ingroup bsp_shared
- *
+ *
* @brief Generic BSP Interrupt Support
*
* The BSP interrupt support manages a sequence of interrupt vector numbers
@@ -272,6 +274,17 @@ static inline void bsp_interrupt_handler_dispatch(rtems_vector_number vector)
}
}
+/**
+ * @brief Is interrupt handler empty.
+ *
+ * This routine returns true if the handler is empty and has not been
+ * initialised else false is returned. The interrupt lock is not used
+ * so this call can be used from within interrupts.
+ *
+ * @return If empty true shall be returned else false is returned.
+ */
+bool bsp_interrupt_handler_is_empty(rtems_vector_number vector);
+
/** @} */
/* For internal use only */
diff --git a/c/src/lib/libbsp/shared/src/irq-generic.c b/c/src/lib/libbsp/shared/src/irq-generic.c
index 19b52afb53..c62a75602e 100644
--- a/c/src/lib/libbsp/shared/src/irq-generic.c
+++ b/c/src/lib/libbsp/shared/src/irq-generic.c
@@ -566,3 +566,22 @@ rtems_status_code rtems_interrupt_handler_iterate(
{
return bsp_interrupt_handler_iterate(vector, routine, arg);
}
+
+bool bsp_interrupt_handler_is_empty(rtems_vector_number vector)
+{
+ rtems_vector_number index = 0;
+ bsp_interrupt_handler_entry *head = NULL;
+ bool empty;
+
+ /* For use in interrupts so no lock. */
+
+ /* Get handler table index */
+ index = bsp_interrupt_handler_index(vector);
+
+ /* Get head entry of the handler list for the vector */
+ head = &bsp_interrupt_handler_table [index];
+
+ empty = bsp_interrupt_is_empty_handler_entry(head);
+
+ return empty;
+}